commit 99bf67fb17478b8a39a832ef9bf5c9723209b7fd Author: Leo Date: Tue Mar 11 21:17:14 2025 +0800 test diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79c113f --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.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..6eb54a1 --- /dev/null +++ b/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "761747bfc538b5af34aa0d3fac380f1bc331ec49" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: android + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: ios + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: linux + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: macos + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: web + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: windows + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + + # 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/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..42c9e2d --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,1227 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Flutter: Run all Tests", + "type": "dart", + "request": "launch", + "program": "./test/" + }, + { + "name": "app", + "request": "launch", + "type": "dart" + }, + { + "name": "app (profile mode)", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "app (release mode)", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "a11y_assessments", + "cwd": "flutter/dev/a11y_assessments", + "request": "launch", + "type": "dart" + }, + { + "name": "a11y_assessments (profile mode)", + "cwd": "flutter/dev/a11y_assessments", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "a11y_assessments (release mode)", + "cwd": "flutter/dev/a11y_assessments", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "automated_tests", + "cwd": "flutter/dev/automated_tests", + "request": "launch", + "type": "dart" + }, + { + "name": "automated_tests (profile mode)", + "cwd": "flutter/dev/automated_tests", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "automated_tests (release mode)", + "cwd": "flutter/dev/automated_tests", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "bots", + "cwd": "flutter/dev/bots", + "request": "launch", + "type": "dart" + }, + { + "name": "customer_testing", + "cwd": "flutter/dev/customer_testing", + "request": "launch", + "type": "dart" + }, + { + "name": "devicelab", + "cwd": "flutter/dev/devicelab", + "request": "launch", + "type": "dart" + }, + { + "name": "forbidden_from_release_tests", + "cwd": "flutter/dev/forbidden_from_release_tests", + "request": "launch", + "type": "dart" + }, + { + "name": "manual_tests", + "cwd": "flutter/dev/manual_tests", + "request": "launch", + "type": "dart" + }, + { + "name": "manual_tests (profile mode)", + "cwd": "flutter/dev/manual_tests", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "manual_tests (release mode)", + "cwd": "flutter/dev/manual_tests", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "missing_dependency_tests", + "cwd": "flutter/dev/missing_dependency_tests", + "request": "launch", + "type": "dart" + }, + { + "name": "missing_dependency_tests (profile mode)", + "cwd": "flutter/dev/missing_dependency_tests", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "missing_dependency_tests (release mode)", + "cwd": "flutter/dev/missing_dependency_tests", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "snippets", + "cwd": "flutter/dev/snippets", + "request": "launch", + "type": "dart" + }, + { + "name": "tools", + "cwd": "flutter/dev/tools", + "request": "launch", + "type": "dart" + }, + { + "name": "tracing_tests", + "cwd": "flutter/dev/tracing_tests", + "request": "launch", + "type": "dart" + }, + { + "name": "tracing_tests (profile mode)", + "cwd": "flutter/dev/tracing_tests", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "tracing_tests (release mode)", + "cwd": "flutter/dev/tracing_tests", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "api", + "cwd": "flutter/examples/api", + "request": "launch", + "type": "dart" + }, + { + "name": "api (profile mode)", + "cwd": "flutter/examples/api", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "api (release mode)", + "cwd": "flutter/examples/api", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flutter_view", + "cwd": "flutter/examples/flutter_view", + "request": "launch", + "type": "dart" + }, + { + "name": "flutter_view (profile mode)", + "cwd": "flutter/examples/flutter_view", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "flutter_view (release mode)", + "cwd": "flutter/examples/flutter_view", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "hello_world", + "cwd": "flutter/examples/hello_world", + "request": "launch", + "type": "dart" + }, + { + "name": "hello_world (profile mode)", + "cwd": "flutter/examples/hello_world", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "hello_world (release mode)", + "cwd": "flutter/examples/hello_world", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "image_list", + "cwd": "flutter/examples/image_list", + "request": "launch", + "type": "dart" + }, + { + "name": "image_list (profile mode)", + "cwd": "flutter/examples/image_list", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "image_list (release mode)", + "cwd": "flutter/examples/image_list", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "layers", + "cwd": "flutter/examples/layers", + "request": "launch", + "type": "dart" + }, + { + "name": "layers (profile mode)", + "cwd": "flutter/examples/layers", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "layers (release mode)", + "cwd": "flutter/examples/layers", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "platform_channel", + "cwd": "flutter/examples/platform_channel", + "request": "launch", + "type": "dart" + }, + { + "name": "platform_channel (profile mode)", + "cwd": "flutter/examples/platform_channel", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "platform_channel (release mode)", + "cwd": "flutter/examples/platform_channel", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "platform_channel_swift", + "cwd": "flutter/examples/platform_channel_swift", + "request": "launch", + "type": "dart" + }, + { + "name": "platform_channel_swift (profile mode)", + "cwd": "flutter/examples/platform_channel_swift", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "platform_channel_swift (release mode)", + "cwd": "flutter/examples/platform_channel_swift", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "platform_view", + "cwd": "flutter/examples/platform_view", + "request": "launch", + "type": "dart" + }, + { + "name": "platform_view (profile mode)", + "cwd": "flutter/examples/platform_view", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "platform_view (release mode)", + "cwd": "flutter/examples/platform_view", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "splash", + "cwd": "flutter/examples/splash", + "request": "launch", + "type": "dart" + }, + { + "name": "splash (profile mode)", + "cwd": "flutter/examples/splash", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "splash (release mode)", + "cwd": "flutter/examples/splash", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "texture", + "cwd": "flutter/examples/texture", + "request": "launch", + "type": "dart" + }, + { + "name": "texture (profile mode)", + "cwd": "flutter/examples/texture", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "texture (release mode)", + "cwd": "flutter/examples/texture", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flutter", + "cwd": "flutter/packages/flutter", + "request": "launch", + "type": "dart" + }, + { + "name": "flutter (profile mode)", + "cwd": "flutter/packages/flutter", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "flutter (release mode)", + "cwd": "flutter/packages/flutter", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flutter_driver", + "cwd": "flutter/packages/flutter_driver", + "request": "launch", + "type": "dart" + }, + { + "name": "flutter_driver (profile mode)", + "cwd": "flutter/packages/flutter_driver", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "flutter_driver (release mode)", + "cwd": "flutter/packages/flutter_driver", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flutter_goldens", + "cwd": "flutter/packages/flutter_goldens", + "request": "launch", + "type": "dart" + }, + { + "name": "flutter_goldens (profile mode)", + "cwd": "flutter/packages/flutter_goldens", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "flutter_goldens (release mode)", + "cwd": "flutter/packages/flutter_goldens", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flutter_localizations", + "cwd": "flutter/packages/flutter_localizations", + "request": "launch", + "type": "dart" + }, + { + "name": "flutter_localizations (profile mode)", + "cwd": "flutter/packages/flutter_localizations", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "flutter_localizations (release mode)", + "cwd": "flutter/packages/flutter_localizations", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flutter_test", + "cwd": "flutter/packages/flutter_test", + "request": "launch", + "type": "dart" + }, + { + "name": "flutter_test (profile mode)", + "cwd": "flutter/packages/flutter_test", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "flutter_test (release mode)", + "cwd": "flutter/packages/flutter_test", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flutter_tools", + "cwd": "flutter/packages/flutter_tools", + "request": "launch", + "type": "dart" + }, + { + "name": "flutter_web_plugins", + "cwd": "flutter/packages/flutter_web_plugins", + "request": "launch", + "type": "dart" + }, + { + "name": "flutter_web_plugins (profile mode)", + "cwd": "flutter/packages/flutter_web_plugins", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "flutter_web_plugins (release mode)", + "cwd": "flutter/packages/flutter_web_plugins", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "fuchsia_remote_debug_protocol", + "cwd": "flutter/packages/fuchsia_remote_debug_protocol", + "request": "launch", + "type": "dart" + }, + { + "name": "integration_test", + "cwd": "flutter/packages/integration_test", + "request": "launch", + "type": "dart" + }, + { + "name": "integration_test (profile mode)", + "cwd": "flutter/packages/integration_test", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "integration_test (release mode)", + "cwd": "flutter/packages/integration_test", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "complex_layout", + "cwd": "flutter/dev/benchmarks/complex_layout", + "request": "launch", + "type": "dart" + }, + { + "name": "complex_layout (profile mode)", + "cwd": "flutter/dev/benchmarks/complex_layout", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "complex_layout (release mode)", + "cwd": "flutter/dev/benchmarks/complex_layout", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "macrobenchmarks", + "cwd": "flutter/dev/benchmarks/macrobenchmarks", + "request": "launch", + "type": "dart" + }, + { + "name": "macrobenchmarks (profile mode)", + "cwd": "flutter/dev/benchmarks/macrobenchmarks", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "macrobenchmarks (release mode)", + "cwd": "flutter/dev/benchmarks/macrobenchmarks", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "microbenchmarks", + "cwd": "flutter/dev/benchmarks/microbenchmarks", + "request": "launch", + "type": "dart" + }, + { + "name": "microbenchmarks (profile mode)", + "cwd": "flutter/dev/benchmarks/microbenchmarks", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "microbenchmarks (release mode)", + "cwd": "flutter/dev/benchmarks/microbenchmarks", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "platform_channels_benchmarks", + "cwd": "flutter/dev/benchmarks/platform_channels_benchmarks", + "request": "launch", + "type": "dart" + }, + { + "name": "platform_channels_benchmarks (profile mode)", + "cwd": "flutter/dev/benchmarks/platform_channels_benchmarks", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "platform_channels_benchmarks (release mode)", + "cwd": "flutter/dev/benchmarks/platform_channels_benchmarks", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "platform_views_layout", + "cwd": "flutter/dev/benchmarks/platform_views_layout", + "request": "launch", + "type": "dart" + }, + { + "name": "platform_views_layout (profile mode)", + "cwd": "flutter/dev/benchmarks/platform_views_layout", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "platform_views_layout (release mode)", + "cwd": "flutter/dev/benchmarks/platform_views_layout", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "platform_views_layout_hybrid_composition", + "cwd": "flutter/dev/benchmarks/platform_views_layout_hybrid_composition", + "request": "launch", + "type": "dart" + }, + { + "name": "platform_views_layout_hybrid_composition (profile mode)", + "cwd": "flutter/dev/benchmarks/platform_views_layout_hybrid_composition", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "platform_views_layout_hybrid_composition (release mode)", + "cwd": "flutter/dev/benchmarks/platform_views_layout_hybrid_composition", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "core", + "cwd": "flutter/dev/conductor/core", + "request": "launch", + "type": "dart" + }, + { + "name": "platform_integration", + "cwd": "flutter/dev/docs/platform_integration", + "request": "launch", + "type": "dart" + }, + { + "name": "renderers", + "cwd": "flutter/dev/docs/renderers", + "request": "launch", + "type": "dart" + }, + { + "name": "android_engine_test", + "cwd": "flutter/dev/integration_tests/android_engine_test", + "request": "launch", + "type": "dart" + }, + { + "name": "android_engine_test (profile mode)", + "cwd": "flutter/dev/integration_tests/android_engine_test", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "android_engine_test (release mode)", + "cwd": "flutter/dev/integration_tests/android_engine_test", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "android_semantics_testing", + "cwd": "flutter/dev/integration_tests/android_semantics_testing", + "request": "launch", + "type": "dart" + }, + { + "name": "android_semantics_testing (profile mode)", + "cwd": "flutter/dev/integration_tests/android_semantics_testing", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "android_semantics_testing (release mode)", + "cwd": "flutter/dev/integration_tests/android_semantics_testing", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "android_verified_input", + "cwd": "flutter/dev/integration_tests/android_verified_input", + "request": "launch", + "type": "dart" + }, + { + "name": "android_verified_input (profile mode)", + "cwd": "flutter/dev/integration_tests/android_verified_input", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "android_verified_input (release mode)", + "cwd": "flutter/dev/integration_tests/android_verified_input", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "android_views", + "cwd": "flutter/dev/integration_tests/android_views", + "request": "launch", + "type": "dart" + }, + { + "name": "android_views (profile mode)", + "cwd": "flutter/dev/integration_tests/android_views", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "android_views (release mode)", + "cwd": "flutter/dev/integration_tests/android_views", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "channels", + "cwd": "flutter/dev/integration_tests/channels", + "request": "launch", + "type": "dart" + }, + { + "name": "channels (profile mode)", + "cwd": "flutter/dev/integration_tests/channels", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "channels (release mode)", + "cwd": "flutter/dev/integration_tests/channels", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "deferred_components_test", + "cwd": "flutter/dev/integration_tests/deferred_components_test", + "request": "launch", + "type": "dart" + }, + { + "name": "deferred_components_test (profile mode)", + "cwd": "flutter/dev/integration_tests/deferred_components_test", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "deferred_components_test (release mode)", + "cwd": "flutter/dev/integration_tests/deferred_components_test", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "external_textures", + "cwd": "flutter/dev/integration_tests/external_textures", + "request": "launch", + "type": "dart" + }, + { + "name": "external_textures (profile mode)", + "cwd": "flutter/dev/integration_tests/external_textures", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "external_textures (release mode)", + "cwd": "flutter/dev/integration_tests/external_textures", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flavors", + "cwd": "flutter/dev/integration_tests/flavors", + "request": "launch", + "type": "dart" + }, + { + "name": "flavors (profile mode)", + "cwd": "flutter/dev/integration_tests/flavors", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "flavors (release mode)", + "cwd": "flutter/dev/integration_tests/flavors", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flutter_gallery", + "cwd": "flutter/dev/integration_tests/flutter_gallery", + "request": "launch", + "type": "dart" + }, + { + "name": "flutter_gallery (profile mode)", + "cwd": "flutter/dev/integration_tests/flutter_gallery", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "flutter_gallery (release mode)", + "cwd": "flutter/dev/integration_tests/flutter_gallery", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "hybrid_android_views", + "cwd": "flutter/dev/integration_tests/hybrid_android_views", + "request": "launch", + "type": "dart" + }, + { + "name": "hybrid_android_views (profile mode)", + "cwd": "flutter/dev/integration_tests/hybrid_android_views", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "hybrid_android_views (release mode)", + "cwd": "flutter/dev/integration_tests/hybrid_android_views", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "ios_app_with_extensions", + "cwd": "flutter/dev/integration_tests/ios_app_with_extensions", + "request": "launch", + "type": "dart" + }, + { + "name": "ios_app_with_extensions (profile mode)", + "cwd": "flutter/dev/integration_tests/ios_app_with_extensions", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "ios_app_with_extensions (release mode)", + "cwd": "flutter/dev/integration_tests/ios_app_with_extensions", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "ios_platform_view_tests", + "cwd": "flutter/dev/integration_tests/ios_platform_view_tests", + "request": "launch", + "type": "dart" + }, + { + "name": "ios_platform_view_tests (profile mode)", + "cwd": "flutter/dev/integration_tests/ios_platform_view_tests", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "ios_platform_view_tests (release mode)", + "cwd": "flutter/dev/integration_tests/ios_platform_view_tests", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "link_hook", + "cwd": "flutter/dev/integration_tests/link_hook", + "request": "launch", + "type": "dart" + }, + { + "name": "new_gallery", + "cwd": "flutter/dev/integration_tests/new_gallery", + "request": "launch", + "type": "dart" + }, + { + "name": "new_gallery (profile mode)", + "cwd": "flutter/dev/integration_tests/new_gallery", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "new_gallery (release mode)", + "cwd": "flutter/dev/integration_tests/new_gallery", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "non_nullable", + "cwd": "flutter/dev/integration_tests/non_nullable", + "request": "launch", + "type": "dart" + }, + { + "name": "non_nullable (profile mode)", + "cwd": "flutter/dev/integration_tests/non_nullable", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "non_nullable (release mode)", + "cwd": "flutter/dev/integration_tests/non_nullable", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "platform_interaction", + "cwd": "flutter/dev/integration_tests/platform_interaction", + "request": "launch", + "type": "dart" + }, + { + "name": "platform_interaction (profile mode)", + "cwd": "flutter/dev/integration_tests/platform_interaction", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "platform_interaction (release mode)", + "cwd": "flutter/dev/integration_tests/platform_interaction", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "release_smoke_test", + "cwd": "flutter/dev/integration_tests/release_smoke_test", + "request": "launch", + "type": "dart" + }, + { + "name": "release_smoke_test (profile mode)", + "cwd": "flutter/dev/integration_tests/release_smoke_test", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "release_smoke_test (release mode)", + "cwd": "flutter/dev/integration_tests/release_smoke_test", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "spell_check", + "cwd": "flutter/dev/integration_tests/spell_check", + "request": "launch", + "type": "dart" + }, + { + "name": "spell_check (profile mode)", + "cwd": "flutter/dev/integration_tests/spell_check", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "spell_check (release mode)", + "cwd": "flutter/dev/integration_tests/spell_check", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "ui", + "cwd": "flutter/dev/integration_tests/ui", + "request": "launch", + "type": "dart" + }, + { + "name": "ui (profile mode)", + "cwd": "flutter/dev/integration_tests/ui", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "ui (release mode)", + "cwd": "flutter/dev/integration_tests/ui", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "web", + "cwd": "flutter/dev/integration_tests/web", + "request": "launch", + "type": "dart" + }, + { + "name": "web (profile mode)", + "cwd": "flutter/dev/integration_tests/web", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "web (release mode)", + "cwd": "flutter/dev/integration_tests/web", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "web_compile_tests", + "cwd": "flutter/dev/integration_tests/web_compile_tests", + "request": "launch", + "type": "dart" + }, + { + "name": "web_compile_tests (profile mode)", + "cwd": "flutter/dev/integration_tests/web_compile_tests", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "web_compile_tests (release mode)", + "cwd": "flutter/dev/integration_tests/web_compile_tests", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "web_e2e_tests", + "cwd": "flutter/dev/integration_tests/web_e2e_tests", + "request": "launch", + "type": "dart" + }, + { + "name": "web_e2e_tests (profile mode)", + "cwd": "flutter/dev/integration_tests/web_e2e_tests", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "web_e2e_tests (release mode)", + "cwd": "flutter/dev/integration_tests/web_e2e_tests", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "wide_gamut_test", + "cwd": "flutter/dev/integration_tests/wide_gamut_test", + "request": "launch", + "type": "dart" + }, + { + "name": "wide_gamut_test (profile mode)", + "cwd": "flutter/dev/integration_tests/wide_gamut_test", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "wide_gamut_test (release mode)", + "cwd": "flutter/dev/integration_tests/wide_gamut_test", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "windows_startup_test", + "cwd": "flutter/dev/integration_tests/windows_startup_test", + "request": "launch", + "type": "dart" + }, + { + "name": "windows_startup_test (profile mode)", + "cwd": "flutter/dev/integration_tests/windows_startup_test", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "windows_startup_test (release mode)", + "cwd": "flutter/dev/integration_tests/windows_startup_test", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "android_driver_extensions", + "cwd": "flutter/dev/tools/android_driver_extensions", + "request": "launch", + "type": "dart" + }, + { + "name": "android_driver_extensions (profile mode)", + "cwd": "flutter/dev/tools/android_driver_extensions", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "android_driver_extensions (release mode)", + "cwd": "flutter/dev/tools/android_driver_extensions", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "gen_defaults", + "cwd": "flutter/dev/tools/gen_defaults", + "request": "launch", + "type": "dart" + }, + { + "name": "gen_keycodes", + "cwd": "flutter/dev/tools/gen_keycodes", + "request": "launch", + "type": "dart" + }, + { + "name": "vitool", + "cwd": "flutter/dev/tools/vitool", + "request": "launch", + "type": "dart" + }, + { + "name": "vitool (profile mode)", + "cwd": "flutter/dev/tools/vitool", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "vitool (release mode)", + "cwd": "flutter/dev/tools/vitool", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "flutter", + "cwd": "flutter/engine/src/flutter", + "request": "launch", + "type": "dart" + }, + { + "name": "test_private", + "cwd": "flutter/packages/flutter/test_private", + "request": "launch", + "type": "dart" + }, + { + "name": "example", + "cwd": "flutter/packages/integration_test/example", + "request": "launch", + "type": "dart" + }, + { + "name": "example (profile mode)", + "cwd": "flutter/packages/integration_test/example", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "example (release mode)", + "cwd": "flutter/packages/integration_test/example", + "request": "launch", + "type": "dart", + "flutterMode": "release" + }, + { + "name": "integration_test_macos", + "cwd": "flutter/packages/integration_test/integration_test_macos", + "request": "launch", + "type": "dart" + }, + { + "name": "integration_test_macos (profile mode)", + "cwd": "flutter/packages/integration_test/integration_test_macos", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "integration_test_macos (release mode)", + "cwd": "flutter/packages/integration_test/integration_test_macos", + "request": "launch", + "type": "dart", + "flutterMode": "release" + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..263abba --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# lamiter + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/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..8630e48 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,58 @@ +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" +} + +android { + namespace = "com.lamiter.lamiter" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.lamiter.lamiter" + // 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 { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} 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..7a37be8 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/lamiter/lamiter/MainActivity.kt b/android/app/src/main/kotlin/com/lamiter/lamiter/MainActivity.kt new file mode 100644 index 0000000..37b4797 --- /dev/null +++ b/android/app/src/main/kotlin/com/lamiter/lamiter/MainActivity.kt @@ -0,0 +1,5 @@ +package com.lamiter.lamiter + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() 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-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..db77bb4 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ 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 0000000..17987b7 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ 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 0000000..09d4391 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ 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 0000000..d5f1c8d Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ 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 0000000..4d6372e Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ 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..3b5b324 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..e1ca574 --- /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-7.6.3-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..536165d --- /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 "7.3.0" apply false + id "org.jetbrains.kotlin.android" version "1.7.10" apply false +} + +include ":app" diff --git a/assets/default_error.png b/assets/default_error.png new file mode 100644 index 0000000..a83c6a0 Binary files /dev/null and b/assets/default_error.png differ diff --git a/assets/meridians/Bladder.png b/assets/meridians/Bladder.png new file mode 100644 index 0000000..82171f3 Binary files /dev/null and b/assets/meridians/Bladder.png differ diff --git a/assets/meridians/Conception.png b/assets/meridians/Conception.png new file mode 100644 index 0000000..2e7ffff Binary files /dev/null and b/assets/meridians/Conception.png differ diff --git a/assets/meridians/GallBladder.png b/assets/meridians/GallBladder.png new file mode 100644 index 0000000..094d970 Binary files /dev/null and b/assets/meridians/GallBladder.png differ diff --git a/assets/meridians/Governing.png b/assets/meridians/Governing.png new file mode 100644 index 0000000..6db7596 Binary files /dev/null and b/assets/meridians/Governing.png differ diff --git a/assets/meridians/Heart.png b/assets/meridians/Heart.png new file mode 100644 index 0000000..71d548e Binary files /dev/null and b/assets/meridians/Heart.png differ diff --git a/assets/meridians/Kidney.png b/assets/meridians/Kidney.png new file mode 100644 index 0000000..dd1eeb9 Binary files /dev/null and b/assets/meridians/Kidney.png differ diff --git a/assets/meridians/LargeIntestine.png b/assets/meridians/LargeIntestine.png new file mode 100644 index 0000000..d2f1f7f Binary files /dev/null and b/assets/meridians/LargeIntestine.png differ diff --git a/assets/meridians/Liver.png b/assets/meridians/Liver.png new file mode 100644 index 0000000..a19467e Binary files /dev/null and b/assets/meridians/Liver.png differ diff --git a/assets/meridians/Lung.png b/assets/meridians/Lung.png new file mode 100644 index 0000000..2a5a85a Binary files /dev/null and b/assets/meridians/Lung.png differ diff --git a/assets/meridians/Pericardium.png b/assets/meridians/Pericardium.png new file mode 100644 index 0000000..8dee472 Binary files /dev/null and b/assets/meridians/Pericardium.png differ diff --git a/assets/meridians/SmallIntestine.png b/assets/meridians/SmallIntestine.png new file mode 100644 index 0000000..7d59a62 Binary files /dev/null and b/assets/meridians/SmallIntestine.png differ diff --git a/assets/meridians/Spleen.png b/assets/meridians/Spleen.png new file mode 100644 index 0000000..d267dd7 Binary files /dev/null and b/assets/meridians/Spleen.png differ diff --git a/assets/meridians/Stomach.png b/assets/meridians/Stomach.png new file mode 100644 index 0000000..5fb800d Binary files /dev/null and b/assets/meridians/Stomach.png differ diff --git a/assets/meridians/TripleWarmer.png b/assets/meridians/TripleWarmer.png new file mode 100644 index 0000000..9d39a4b Binary files /dev/null and b/assets/meridians/TripleWarmer.png differ diff --git a/assets/muscles/back/main.png b/assets/muscles/back/main.png new file mode 100644 index 0000000..bcc1b2f Binary files /dev/null and b/assets/muscles/back/main.png differ diff --git a/assets/muscles/back/低側斜方肌.png b/assets/muscles/back/低側斜方肌.png new file mode 100644 index 0000000..c570ac9 Binary files /dev/null and b/assets/muscles/back/低側斜方肌.png differ diff --git a/assets/muscles/back/半腱肌半腱膜.png b/assets/muscles/back/半腱肌半腱膜.png new file mode 100644 index 0000000..10fd16a Binary files /dev/null and b/assets/muscles/back/半腱肌半腱膜.png differ diff --git a/assets/muscles/back/股二頭肌.png b/assets/muscles/back/股二頭肌.png new file mode 100644 index 0000000..6e26e4b Binary files /dev/null and b/assets/muscles/back/股二頭肌.png differ diff --git a/assets/muscles/back/肩胛提肌.png b/assets/muscles/back/肩胛提肌.png new file mode 100644 index 0000000..3eddc8a Binary files /dev/null and b/assets/muscles/back/肩胛提肌.png differ diff --git a/assets/muscles/back/脛骨前肌.png b/assets/muscles/back/脛骨前肌.png new file mode 100644 index 0000000..eed8ce2 Binary files /dev/null and b/assets/muscles/back/脛骨前肌.png differ diff --git a/assets/muscles/back/腓腸肌.png b/assets/muscles/back/腓腸肌.png new file mode 100644 index 0000000..6599884 Binary files /dev/null and b/assets/muscles/back/腓腸肌.png differ diff --git a/assets/muscles/back/膕繩肌.png b/assets/muscles/back/膕繩肌.png new file mode 100644 index 0000000..be91531 Binary files /dev/null and b/assets/muscles/back/膕繩肌.png differ diff --git a/assets/muscles/back/臀大肌.png b/assets/muscles/back/臀大肌.png new file mode 100644 index 0000000..2865809 Binary files /dev/null and b/assets/muscles/back/臀大肌.png differ diff --git a/assets/muscles/back/菱形肌.png b/assets/muscles/back/菱形肌.png new file mode 100644 index 0000000..7e913c4 Binary files /dev/null and b/assets/muscles/back/菱形肌.png differ diff --git a/assets/muscles/back/足底筋膜.png b/assets/muscles/back/足底筋膜.png new file mode 100644 index 0000000..54f0c2f Binary files /dev/null and b/assets/muscles/back/足底筋膜.png differ diff --git a/assets/muscles/back/頭夾肌頸夾肌.png b/assets/muscles/back/頭夾肌頸夾肌.png new file mode 100644 index 0000000..71b8d9b Binary files /dev/null and b/assets/muscles/back/頭夾肌頸夾肌.png differ diff --git a/assets/muscles/back/高側斜方肌.png b/assets/muscles/back/高側斜方肌.png new file mode 100644 index 0000000..80d8999 Binary files /dev/null and b/assets/muscles/back/高側斜方肌.png differ diff --git a/assets/muscles/front/main.png b/assets/muscles/front/main.png new file mode 100644 index 0000000..391d066 Binary files /dev/null and b/assets/muscles/front/main.png differ diff --git a/assets/muscles/front/股四頭肌.png b/assets/muscles/front/股四頭肌.png new file mode 100644 index 0000000..06cdf8e Binary files /dev/null and b/assets/muscles/front/股四頭肌.png differ diff --git a/assets/muscles/front/胸大肌.png b/assets/muscles/front/胸大肌.png new file mode 100644 index 0000000..c84ea82 Binary files /dev/null and b/assets/muscles/front/胸大肌.png differ diff --git a/assets/muscles/front/腹部肌群.png b/assets/muscles/front/腹部肌群.png new file mode 100644 index 0000000..0cdf721 Binary files /dev/null and b/assets/muscles/front/腹部肌群.png differ diff --git a/assets/muscles/front/髖內收肌.png b/assets/muscles/front/髖內收肌.png new file mode 100644 index 0000000..4b3b442 Binary files /dev/null and b/assets/muscles/front/髖內收肌.png differ diff --git a/assets/muscles/front/髖外旋肌.png b/assets/muscles/front/髖外旋肌.png new file mode 100644 index 0000000..dcb99b6 Binary files /dev/null and b/assets/muscles/front/髖外旋肌.png differ diff --git a/assets/muscles/side_left/main.png b/assets/muscles/side_left/main.png new file mode 100644 index 0000000..04310a0 Binary files /dev/null and b/assets/muscles/side_left/main.png differ diff --git a/assets/muscles/side_left/前鉅肌.png b/assets/muscles/side_left/前鉅肌.png new file mode 100644 index 0000000..5f98559 Binary files /dev/null and b/assets/muscles/side_left/前鉅肌.png differ diff --git a/assets/muscles/side_left/斜角肌.png b/assets/muscles/side_left/斜角肌.png new file mode 100644 index 0000000..3109bd8 Binary files /dev/null and b/assets/muscles/side_left/斜角肌.png differ diff --git a/assets/muscles/side_left/胸鎖乳突肌.png b/assets/muscles/side_left/胸鎖乳突肌.png new file mode 100644 index 0000000..08e73be Binary files /dev/null and b/assets/muscles/side_left/胸鎖乳突肌.png differ diff --git a/assets/muscles/side_right/main.png b/assets/muscles/side_right/main.png new file mode 100644 index 0000000..94e584f Binary files /dev/null and b/assets/muscles/side_right/main.png differ diff --git a/assets/muscles/side_right/前鉅肌.png b/assets/muscles/side_right/前鉅肌.png new file mode 100644 index 0000000..c79877e Binary files /dev/null and b/assets/muscles/side_right/前鉅肌.png differ diff --git a/assets/muscles/side_right/斜角肌.png b/assets/muscles/side_right/斜角肌.png new file mode 100644 index 0000000..f95278f Binary files /dev/null and b/assets/muscles/side_right/斜角肌.png differ diff --git a/assets/muscles/side_right/胸鎖乳突肌.png b/assets/muscles/side_right/胸鎖乳突肌.png new file mode 100644 index 0000000..78ee744 Binary files /dev/null and b/assets/muscles/side_right/胸鎖乳突肌.png differ diff --git a/assets/x_ray/forward_head_posture/high_risk.png b/assets/x_ray/forward_head_posture/high_risk.png new file mode 100644 index 0000000..2ac2f4c Binary files /dev/null and b/assets/x_ray/forward_head_posture/high_risk.png differ diff --git a/assets/x_ray/forward_head_posture/normal.png b/assets/x_ray/forward_head_posture/normal.png new file mode 100644 index 0000000..f37d4b7 Binary files /dev/null and b/assets/x_ray/forward_head_posture/normal.png differ diff --git a/assets/x_ray/head_tilt/high_risk.png b/assets/x_ray/head_tilt/high_risk.png new file mode 100644 index 0000000..ab9a473 Binary files /dev/null and b/assets/x_ray/head_tilt/high_risk.png differ diff --git a/assets/x_ray/head_tilt/medium_risk.png b/assets/x_ray/head_tilt/medium_risk.png new file mode 100644 index 0000000..218e9f4 Binary files /dev/null and b/assets/x_ray/head_tilt/medium_risk.png differ diff --git a/assets/x_ray/head_tilt/normal.png b/assets/x_ray/head_tilt/normal.png new file mode 100644 index 0000000..c400c52 Binary files /dev/null and b/assets/x_ray/head_tilt/normal.png differ diff --git a/assets/x_ray/hyperextended_knee/high_risk.png b/assets/x_ray/hyperextended_knee/high_risk.png new file mode 100644 index 0000000..4365b0c Binary files /dev/null and b/assets/x_ray/hyperextended_knee/high_risk.png differ diff --git a/assets/x_ray/hyperextended_knee/normal.png b/assets/x_ray/hyperextended_knee/normal.png new file mode 100644 index 0000000..ea1f8b8 Binary files /dev/null and b/assets/x_ray/hyperextended_knee/normal.png differ diff --git a/assets/x_ray/o_legs/high_risk.png b/assets/x_ray/o_legs/high_risk.png new file mode 100644 index 0000000..021c4a1 Binary files /dev/null and b/assets/x_ray/o_legs/high_risk.png differ diff --git a/assets/x_ray/o_legs/normal.png b/assets/x_ray/o_legs/normal.png new file mode 100644 index 0000000..eaf5706 Binary files /dev/null and b/assets/x_ray/o_legs/normal.png differ diff --git a/assets/x_ray/pelvic_tilt/high_risk.png b/assets/x_ray/pelvic_tilt/high_risk.png new file mode 100644 index 0000000..6851299 Binary files /dev/null and b/assets/x_ray/pelvic_tilt/high_risk.png differ diff --git a/assets/x_ray/pelvic_tilt/medium_risk.png b/assets/x_ray/pelvic_tilt/medium_risk.png new file mode 100644 index 0000000..201d5df Binary files /dev/null and b/assets/x_ray/pelvic_tilt/medium_risk.png differ diff --git a/assets/x_ray/pelvic_tilt/normal.png b/assets/x_ray/pelvic_tilt/normal.png new file mode 100644 index 0000000..e3a0829 Binary files /dev/null and b/assets/x_ray/pelvic_tilt/normal.png differ diff --git a/assets/x_ray/rounded_shoulders/high_risk.png b/assets/x_ray/rounded_shoulders/high_risk.png new file mode 100644 index 0000000..412f735 Binary files /dev/null and b/assets/x_ray/rounded_shoulders/high_risk.png differ diff --git a/assets/x_ray/rounded_shoulders/normal.png b/assets/x_ray/rounded_shoulders/normal.png new file mode 100644 index 0000000..1b39eb2 Binary files /dev/null and b/assets/x_ray/rounded_shoulders/normal.png differ diff --git a/assets/x_ray/spinal_misalignment/high_risk.png b/assets/x_ray/spinal_misalignment/high_risk.png new file mode 100644 index 0000000..6afd7e2 Binary files /dev/null and b/assets/x_ray/spinal_misalignment/high_risk.png differ diff --git a/assets/x_ray/spinal_misalignment/normal.png b/assets/x_ray/spinal_misalignment/normal.png new file mode 100644 index 0000000..fcf60a2 Binary files /dev/null and b/assets/x_ray/spinal_misalignment/normal.png differ diff --git a/assets/x_ray/uneven_shoulders/high_risk.png b/assets/x_ray/uneven_shoulders/high_risk.png new file mode 100644 index 0000000..375da3c Binary files /dev/null and b/assets/x_ray/uneven_shoulders/high_risk.png differ diff --git a/assets/x_ray/uneven_shoulders/medium_risk.png b/assets/x_ray/uneven_shoulders/medium_risk.png new file mode 100644 index 0000000..e5222a6 Binary files /dev/null and b/assets/x_ray/uneven_shoulders/medium_risk.png differ diff --git a/assets/x_ray/uneven_shoulders/normal.png b/assets/x_ray/uneven_shoulders/normal.png new file mode 100644 index 0000000..c3d448f Binary files /dev/null and b/assets/x_ray/uneven_shoulders/normal.png differ diff --git a/assets/x_ray/x_legs/high_risk.png b/assets/x_ray/x_legs/high_risk.png new file mode 100644 index 0000000..bd70912 Binary files /dev/null and b/assets/x_ray/x_legs/high_risk.png differ diff --git a/assets/x_ray/x_legs/normal.png b/assets/x_ray/x_legs/normal.png new file mode 100644 index 0000000..de2aad4 Binary files /dev/null and b/assets/x_ray/x_legs/normal.png differ diff --git a/assets/x_ray/xo_legs/high_risk.png b/assets/x_ray/xo_legs/high_risk.png new file mode 100644 index 0000000..206a1d5 Binary files /dev/null and b/assets/x_ray/xo_legs/high_risk.png differ diff --git a/assets/x_ray/xo_legs/normal.png b/assets/x_ray/xo_legs/normal.png new file mode 100644 index 0000000..088a915 Binary files /dev/null and b/assets/x_ray/xo_legs/normal.png differ diff --git a/assets/zong_fu_organs/main.png b/assets/zong_fu_organs/main.png new file mode 100644 index 0000000..9ab16c8 Binary files /dev/null and b/assets/zong_fu_organs/main.png differ diff --git a/assets/zong_fu_organs/大腸.png b/assets/zong_fu_organs/大腸.png new file mode 100644 index 0000000..1ec14b5 Binary files /dev/null and b/assets/zong_fu_organs/大腸.png differ diff --git a/assets/zong_fu_organs/小腸.png b/assets/zong_fu_organs/小腸.png new file mode 100644 index 0000000..2b3edec Binary files /dev/null and b/assets/zong_fu_organs/小腸.png differ diff --git a/assets/zong_fu_organs/心.png b/assets/zong_fu_organs/心.png new file mode 100644 index 0000000..e528f3c Binary files /dev/null and b/assets/zong_fu_organs/心.png differ diff --git a/assets/zong_fu_organs/甲狀腺.png b/assets/zong_fu_organs/甲狀腺.png new file mode 100644 index 0000000..f95c31d Binary files /dev/null and b/assets/zong_fu_organs/甲狀腺.png differ diff --git a/assets/zong_fu_organs/肝.png b/assets/zong_fu_organs/肝.png new file mode 100644 index 0000000..662b568 Binary files /dev/null and b/assets/zong_fu_organs/肝.png differ diff --git a/assets/zong_fu_organs/肺.png b/assets/zong_fu_organs/肺.png new file mode 100644 index 0000000..bb54ffe Binary files /dev/null and b/assets/zong_fu_organs/肺.png differ diff --git a/assets/zong_fu_organs/胃.png b/assets/zong_fu_organs/胃.png new file mode 100644 index 0000000..97f2717 Binary files /dev/null and b/assets/zong_fu_organs/胃.png differ diff --git a/assets/zong_fu_organs/胰臟.png b/assets/zong_fu_organs/胰臟.png new file mode 100644 index 0000000..9aa844f Binary files /dev/null and b/assets/zong_fu_organs/胰臟.png differ diff --git a/assets/zong_fu_organs/脾.png b/assets/zong_fu_organs/脾.png new file mode 100644 index 0000000..ea48a84 Binary files /dev/null and b/assets/zong_fu_organs/脾.png differ diff --git a/assets/zong_fu_organs/腎.png b/assets/zong_fu_organs/腎.png new file mode 100644 index 0000000..39485c7 Binary files /dev/null and b/assets/zong_fu_organs/腎.png differ diff --git a/assets/zong_fu_organs/腦.png b/assets/zong_fu_organs/腦.png new file mode 100644 index 0000000..8486e8e Binary files /dev/null and b/assets/zong_fu_organs/腦.png differ diff --git a/assets/zong_fu_organs/膀胱.png b/assets/zong_fu_organs/膀胱.png new file mode 100644 index 0000000..c2b1bee Binary files /dev/null and b/assets/zong_fu_organs/膀胱.png differ diff --git a/assets/zong_fu_organs/膽.png b/assets/zong_fu_organs/膽.png new file mode 100644 index 0000000..99e2e0b Binary files /dev/null and b/assets/zong_fu_organs/膽.png differ diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: 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..ec97fc6 --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..c4855bf --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..d97f17e --- /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/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..5968cc5 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,48 @@ +PODS: + - Flutter (1.0.0) + - flutter_keyboard_visibility (0.0.1): + - Flutter + - image_gallery_saver (2.0.2): + - Flutter + - image_picker_ios (0.0.1): + - Flutter + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - Flutter (from `Flutter`) + - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) + - image_gallery_saver (from `.symlinks/plugins/image_gallery_saver/ios`) + - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + Flutter: + :path: Flutter + flutter_keyboard_visibility: + :path: ".symlinks/plugins/flutter_keyboard_visibility/ios" + image_gallery_saver: + :path: ".symlinks/plugins/image_gallery_saver/ios" + image_picker_ios: + :path: ".symlinks/plugins/image_picker_ios/ios" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" + +SPEC CHECKSUMS: + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 + image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb + image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796 + +COCOAPODS: 1.16.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b5e1619 --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,757 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 28FD7B114450F50C9D6CF396 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 459936BD7B6F3E71C1EA09F3 /* Pods_RunnerTests.framework */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 5EBADCC4C3F0F9D6A76A28B4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FD11876175AD544DDE3341 /* Pods_Runner.framework */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* 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 = ""; }; + 2640F1A49858E4240CD2AD9A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2D15730951009893463BEC24 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 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 = ""; }; + 459936BD7B6F3E71C1EA09F3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 84FD11876175AD544DDE3341 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; 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 = ""; }; + A4EC831042C91F2499F631AE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D774DD7E24B17BD578F3AF5A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + DC2EF0A320604EC84B02610D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + E3109FC3E58BE2B45E2A9D5E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5EBADCC4C3F0F9D6A76A28B4 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2674CBD12D57D985FD97BAD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 28FD7B114450F50C9D6CF396 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 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 */, + DF04F5D441410205568CB2F3 /* Pods */, + DE487EC90FC1924BA4E6B910 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + DE487EC90FC1924BA4E6B910 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 84FD11876175AD544DDE3341 /* Pods_Runner.framework */, + 459936BD7B6F3E71C1EA09F3 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + DF04F5D441410205568CB2F3 /* Pods */ = { + isa = PBXGroup; + children = ( + 2640F1A49858E4240CD2AD9A /* Pods-Runner.debug.xcconfig */, + A4EC831042C91F2499F631AE /* Pods-Runner.release.xcconfig */, + 2D15730951009893463BEC24 /* Pods-Runner.profile.xcconfig */, + D774DD7E24B17BD578F3AF5A /* Pods-RunnerTests.debug.xcconfig */, + E3109FC3E58BE2B45E2A9D5E /* Pods-RunnerTests.release.xcconfig */, + DC2EF0A320604EC84B02610D /* Pods-RunnerTests.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 84F722C9D4F7C6AE31A318C6 /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + B2674CBD12D57D985FD97BAD /* Frameworks */, + ); + 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 = ( + E3BA52FE16DDF40B76E03FD9 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + BE7706A0929BFB7234E36D96 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + 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"; + }; + 84F722C9D4F7C6AE31A318C6 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 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"; + }; + BE7706A0929BFB7234E36D96 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + E3BA52FE16DDF40B76E03FD9 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + 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)"; + DEVELOPMENT_TEAM = VJ8JX6GV3A; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Previewer; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.previewer; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D774DD7E24B17BD578F3AF5A /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.lamiter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E3109FC3E58BE2B45E2A9D5E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.lamiter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DC2EF0A320604EC84B02610D /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.lamiter.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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + 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)"; + DEVELOPMENT_TEAM = VJ8JX6GV3A; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Previewer; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.previewer; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = VJ8JX6GV3A; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Previewer; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.previewer; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + 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..15cada4 --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + 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..6266644 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..1ce217a --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "Group 33666-2.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Group 33666-2.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Group 33666-2.png new file mode 100644 index 0000000..f8cd9ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Group 33666-2.png differ diff --git a/ios/Runner/Assets.xcassets/Contents.json b/ios/Runner/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios/Runner/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ 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 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ 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 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ 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/Assets.xcassets/logo.imageset/Contents.json b/ios/Runner/Assets.xcassets/logo.imageset/Contents.json new file mode 100644 index 0000000..193da3c --- /dev/null +++ b/ios/Runner/Assets.xcassets/logo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Group 33666.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Runner/Assets.xcassets/logo.imageset/Group 33666.png b/ios/Runner/Assets.xcassets/logo.imageset/Group 33666.png new file mode 100644 index 0000000..4e8c562 Binary files /dev/null and b/ios/Runner/Assets.xcassets/logo.imageset/Group 33666.png differ diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..c360bd1 --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..ff3ee21 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..66a037f --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,55 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Previewer + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + lamiter + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + NSCameraUsageDescription + Lamiter 需要相機權限。 + NSMicrophoneUsageDescription + Lamiter 需要麥克風權限。 + NSPhotoLibraryUsageDescription + Lamiter 需要相簿權限。 + NSPhotoLibraryAddUsageDescription + Lamiter 想要新增相片到相簿。 + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + + 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/l10n.yaml b/l10n.yaml new file mode 100644 index 0000000..e39d2e3 --- /dev/null +++ b/l10n.yaml @@ -0,0 +1,4 @@ +arb-dir: lib/l10n +nullable-getter: false +template-arb-file: app_zh.arb +output-localization-file: app_localizations.dart diff --git a/lib/Class/API/api.dart b/lib/Class/API/api.dart new file mode 100644 index 0000000..280a81c --- /dev/null +++ b/lib/Class/API/api.dart @@ -0,0 +1,509 @@ +import 'dart:async'; +import 'dart:convert'; +import 'package:http/http.dart' as http; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/constitution_form.dart'; +import 'package:lamiter/Class/Form/posture_issue_form.dart'; +import 'package:lamiter/Class/Result/constitution_result.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Class/User/client.dart'; + +class API { + final app_server_ip = 'http://139.227.101.187:7723'; + // 'http://127.0.0.1:3000'; + final constitution_model_ip = 'http://211.22.135.143:7600'; + final posture_issue_model_ip = 'http://211.22.135.143:8202'; + + Future> _GET(String uri) async { + try { + final response = await http.get( + Uri.parse(uri), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + ); + return jsonDecode(response.body) as Map; + } catch (e) { + /*伺服器異常*/ + print(e.toString()); + } + return {'errorMessage': '無法連線伺服器。請稍後重試,或聯繫開發人員。'}; + } + + Future> _POST(String uri, Object? body) async { + try { + final response = await http.post( + Uri.parse(uri), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: body, + ); + return jsonDecode(response.body) as Map; + } catch (e) { + /*伺服器異常*/ + print(e.toString()); + } + return {'errorMessage': '無法連線伺服器。請稍後重試,或聯繫開發人員。'}; + } + + // 獲取封面照 + Future> get_lamiter_image() async { + return await _GET( + '$app_server_ip/get_lamiter_image', + ); + } + + // 獲取logo + Future> get_lamiter_logo() async { + return await _GET( + '$app_server_ip/get_lamiter_logo', + ); + } + + // 最大可新增客戶數量 + Future> get_client_max_number( + String managerId, + ) async { + return await _POST( + '$app_server_ip/get_client_max_number', + jsonEncode({ + 'managerId': managerId, + }), + ); + } + + // 登入 + Future> login( + String account, + String password, + ) async { + return await _POST( + '$app_server_ip/login', + jsonEncode({ + 'account': account, + 'password': password, + }), + ); + } + + // 取得所有客戶(按照最近更新時間排列) + Future> get_clients(String managerId) async { + return await _POST( + '$app_server_ip/get_clients', + jsonEncode({ + 'managerId': managerId, + }), + ); + } + + // 取得客戶(用於即時更新用戶主頁) + Future> get_client(String clientId) async { + return await _POST( + '$app_server_ip/get_client', + jsonEncode({ + 'clientId': clientId, + }), + ); + } + + // 新增客戶 + Future> create_client( + String managerId, + Client client, + ) async { + return await _POST( + '$app_server_ip/create_client', + jsonEncode({ + 'managerId': managerId, + 'clientJson': client.toJson(), + }), + ); + } + + // 刪除客戶 + Future> delete_client( + String managerId, + String clientId, + ) async { + return await _POST( + '$app_server_ip/delete_client', + jsonEncode({ + 'managerId': managerId, + 'clientId': clientId, + }), + ); + } + + // 更新客戶 + Future> update_client( + String managerId, + Client client, + ) async { + return await _POST( + '$app_server_ip/update_client', + jsonEncode({ + 'managerId': managerId, + 'clientJson': client.toJson(), + }), + ); + } + + // 新增診斷 + Future> create_diagnosis(Diagnosis diagnosis) async { + return await _POST( + '$app_server_ip/create_diagnosis', + jsonEncode({ + 'diagnosisJson': diagnosis.toJson(), + }), + ); + } + + // 取得診斷 + Future> get_diagnoses(String clientId) async { + return await _POST( + '$app_server_ip/get_diagnoses', + jsonEncode({'clientId': clientId}), + ); + } + + // 創建客戶表格 + Future> get_create_client_form() async { + return await _GET('$app_server_ip/get_create_client_form'); + } + + // 診斷問卷 + Future> get_health_index_form() async { + return await _GET('$app_server_ip/get_health_index_form'); + } + + Future> get_physical_index_form() async { + return await _GET('$app_server_ip/get_physical_index_form'); + } + + Future> get_urban_disease_form() async { + return await _GET('$app_server_ip/get_urban_disease_form'); + } + + Future> get_stress_index_form() async { + return await _GET('$app_server_ip/get_stress_index_form'); + } + + Future> get_sleep_well_index_form() async { + return await _GET('$app_server_ip/get_sleep_well_index_form'); + } + + Future> get_constitution_form() async { + return await _GET('$app_server_ip/get_constitution_form'); + } + + Future> get_zong_fu_index_form() async { + return await _GET('$app_server_ip/get_zong_fu_index_form'); + } + + Future> get_posture_issue_form() async { + return await _GET('$app_server_ip/get_posture_issue_form'); + } + + // 體質 + Future> get_constitutions() async { + return await _GET('$app_server_ip/get_constitutions'); + } + + // Future> get_constitution(String constitutionId) async { + // return await _POST( + // '$app_server_ip/get_constitution', + // jsonEncode({ + // 'constitutionId': constitutionId, + // }), + // ); + // } + + // 臟腑 + Future> get_zong_fu_organs() async { + return await _GET('$app_server_ip/get_zong_fu_organs'); + } + + // 體態 + Future> get_posture_issues() async { + return await _GET('$app_server_ip/get_posture_issues'); + } + + // 體態症狀 + Future> get_symptoms() async { + return await _GET('$app_server_ip/get_symptoms'); + } + + // 都會疾病 + Future> get_urban_diseases() async { + return await _GET('$app_server_ip/get_urban_diseases'); + } + + Future> get_urban_disease_image( + String urbanDiseaseId, + ) async { + return await _POST( + '$app_server_ip/get_urban_disease_image', + jsonEncode({ + 'urbanDiseaseId': urbanDiseaseId, + }), + ); + } + + Future> get_urban_disease_zh_image( + String urbanDiseaseId, + ) async { + return await _POST( + '$app_server_ip/get_urban_disease_zh_image', + jsonEncode({ + 'urbanDiseaseId': urbanDiseaseId, + }), + ); + } + + // 經絡穴位系統 + Future> get_constitution_meridian_network( + String constitutionId, + List zongFuOrgansIds, + ) async { + return await _POST( + '$app_server_ip/get_constitution_meridian_network', + jsonEncode({ + 'constitutionId': constitutionId, + 'zongFuOrgansIds': zongFuOrgansIds, + }), + ); + } + + Future> get_body_parts( + List postureIssuesIds, + ) async { + return await _POST( + '$app_server_ip/get_body_parts', + jsonEncode({ + 'postureIssuesIds': postureIssuesIds, + }), + ); + } + + Future> get_body_issues( + List bodyIssuesIds, + ) async { + return await _POST( + '$app_server_ip/get_body_issues', + jsonEncode({ + 'bodyIssuesIds': bodyIssuesIds, + }), + ); + } + + Future> get_acupoint(String acupointId) async { + return await _POST( + '$app_server_ip/get_acupoint', + jsonEncode({ + 'acupointId': acupointId, + }), + ); + } + + Future> get_acupoint_image(String acupointId) async { + return await _POST( + '$app_server_ip/get_acupoint_image', + jsonEncode({ + 'acupointId': acupointId, + }), + ); + } + + Future> get_meridian(String meridianId) async { + return await _POST( + '$app_server_ip/get_meridian', + jsonEncode({ + 'meridianId': meridianId, + }), + ); + } + + Future> get_meridian_image(String meridianId) async { + return await _POST( + '$app_server_ip/get_meridian_image', + jsonEncode({ + 'meridianId': meridianId, + }), + ); + } + + // 節氣食譜 + Future> get_seasonal_recipe( + String constitutionId, + String season, + ) async { + return await _POST( + '$app_server_ip/get_seasonal_recipe', + jsonEncode({ + 'constitutionId': constitutionId, + 'season': season, + }), + ); + } + + // 院所鏈接 + Future> get_medical_facilities(String managerId) async { + return await _POST( + '$app_server_ip/get_medical_facilities', + jsonEncode({'managerId': managerId}), + ); + } + + // 配對產品 + Future> get_products(String managerId) async { + return await _POST( + '$app_server_ip/get_products', + jsonEncode({'managerId': managerId}), + ); + } + + Future> get_treatments(String managerId) async { + return await _POST( + '$app_server_ip/get_treatments', + jsonEncode({'managerId': managerId}), + ); + } + + Future> get_courses(String managerId) async { + return await _POST( + '$app_server_ip/get_courses', + jsonEncode({'managerId': managerId}), + ); + } + + Future> create_usage_time( + String managerId, DateTime startTime, DateTime endTime) async { + return await _POST( + '$app_server_ip/create_usage_time', + jsonEncode({ + 'managerId': managerId, + 'usageTimeJson': { + 'startTime': startTime.toUtc().toIso8601String(), + 'endTime': endTime.toUtc().toIso8601String(), + } + }), + ); + } + + // 體質體態模型 + Future constitution_analysis( + ConstitutionForm form) async { + if (form.tongueImage == null) return null; + String? image_id = await _submit_image( + '$constitution_model_ip/api/Tongue_Analysis', + form.tongueImage, + ); + if (image_id == null) return null; + final result = await _analysis( + '$constitution_model_ip/api/Tongue_Analysis_Result', + jsonEncode({ + 'image_id': image_id, + })); + if (result == null) return null; + return ConstitutionResult.fromJson(result); + } + + Future posture_issue_analysis( + PostureIssueForm form) async { + // TODO API需要可以確認現在圖片的分析狀態 + if (form.frontViewImage == null && form.sideViewImage == null) return null; + String? front_view_image_id, side_view_image_id; + if (form.frontViewImage != null) { + front_view_image_id = await _submit_image( + '$posture_issue_model_ip/api/Posture_Analysis_Front_View', + form.frontViewImage, + ); + } + if (form.sideViewImage != null) { + side_view_image_id = await _submit_image( + '$posture_issue_model_ip/api/Posture_Analysis_Side_View', + form.sideViewImage, + ); + } + if (front_view_image_id == null && side_view_image_id == null) return null; + if (front_view_image_id != null) { + final frontViewResult = await _analysis( + '$posture_issue_model_ip/api/Posture_Analysis_Result', + jsonEncode({ + 'front_view_image_id': front_view_image_id, + 'side_view_image_id': null + })); + if (frontViewResult == null) return null; + } + if (side_view_image_id != null) { + final sideViewResult = await _analysis( + '$posture_issue_model_ip/api/Posture_Analysis_Result', + jsonEncode({ + 'front_view_image_id': null, + 'side_view_image_id': side_view_image_id + })); + if (sideViewResult == null) return null; + } + final result = await _analysis( + '$posture_issue_model_ip/api/Posture_Analysis_Result', + jsonEncode({ + 'front_view_image_id': front_view_image_id, + 'side_view_image_id': side_view_image_id + })); + if (result == null) return null; + return PostureIssueResult.fromJson(result); + } + + Future _submit_image(String uri, String? img64) async { + final response = await http.post( + Uri.parse(uri), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: jsonEncode({ + 'image': img64, + }), + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body)['image_id']; + } else { + return null; + } + } + + Future _analysis(String uri, Object body) async { + dynamic result; + + Timer? _timer; + final completer = Completer(); + _timer = Timer.periodic(const Duration(seconds: 1), (timer) async { + final response = await http.post( + Uri.parse(uri), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: body, + ); + if (response.statusCode == 200) { + if (jsonDecode(response.body).isEmpty) { + result = null; // 圖片還沒分析完成 + } else { + result = jsonDecode(response.body) as Map; + } + } else { + result = null; // 伺服器異常 + } + + if (timer.tick >= 10 || result != null) { + _timer!.cancel(); + try { + completer.complete(); + } catch (e) {} + } + }); + await completer.future; + return result; + } +} diff --git a/lib/Class/Diagnosis/acupoint.dart b/lib/Class/Diagnosis/acupoint.dart new file mode 100644 index 0000000..1ae46d4 --- /dev/null +++ b/lib/Class/Diagnosis/acupoint.dart @@ -0,0 +1,20 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class Acupoint extends Entity { + final String relatedMeridianOrAcupointId; + + Acupoint({ + required super.id, + required super.name, + required this.relatedMeridianOrAcupointId, + }); + + // Named constructor from JSON + Acupoint.fromJson(Map json) + : relatedMeridianOrAcupointId = + json['relatedMeridianOrAcupointId'] as String, + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Diagnosis/body_issue.dart b/lib/Class/Diagnosis/body_issue.dart new file mode 100644 index 0000000..7da8c9b --- /dev/null +++ b/lib/Class/Diagnosis/body_issue.dart @@ -0,0 +1,22 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class BodyIssue extends Entity { + final List relatedAcupointsIds; + + BodyIssue({ + required super.id, + required super.name, + required this.relatedAcupointsIds, + }); + + // Named constructor from JSON + BodyIssue.fromJson(Map json) + : relatedAcupointsIds = (json['relatedAcupointsIds'] as List?) + ?.map((item) => item as String) + .toList() ?? + [], + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Diagnosis/body_part.dart b/lib/Class/Diagnosis/body_part.dart new file mode 100644 index 0000000..5dcd0f0 --- /dev/null +++ b/lib/Class/Diagnosis/body_part.dart @@ -0,0 +1,28 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class BodyPart extends Entity { + final List postureIssuesIds; + final List bodyIssuesIds; + + BodyPart({ + required super.id, + required super.name, + required this.postureIssuesIds, + required this.bodyIssuesIds, + }); + + // Named constructor from JSON + BodyPart.fromJson(Map json) + : postureIssuesIds = (json['postureIssuesIds'] as List?) + ?.map((item) => item as String) + .toList() ?? + [], + bodyIssuesIds = (json['bodyIssuesIds'] as List?) + ?.map((item) => item as String) + .toList() ?? + [], + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Diagnosis/constitution.dart b/lib/Class/Diagnosis/constitution.dart new file mode 100644 index 0000000..2d8dfe9 --- /dev/null +++ b/lib/Class/Diagnosis/constitution.dart @@ -0,0 +1,37 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class Constitution extends Entity { + final String cause; + final String symptomView; + final String dietGuide; + final String lifeRoutine; + // final List zongFuConstitutionsIds; + final List relatedAcupointsIds; // todo db + + Constitution({ + required super.id, + required super.name, + required this.cause, + required this.symptomView, + required this.dietGuide, + required this.lifeRoutine, + // required this.zongFuConstitutionsIds, + required this.relatedAcupointsIds, + }); + + // Named constructor from JSON + Constitution.fromJson(Map json) + : cause = json['cause'] as String, + symptomView = json['symptomView'] as String, + dietGuide = json['dietGuide'] as String, + lifeRoutine = json['lifeRoutine'] as String, + // zongFuConstitutionsIds = [], + relatedAcupointsIds = (json['relatedAcupointsIds'] as List?) + ?.map((item) => item as String) + .toList() ?? + [], + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Diagnosis/diagnosis.dart b/lib/Class/Diagnosis/diagnosis.dart new file mode 100644 index 0000000..a39d776 --- /dev/null +++ b/lib/Class/Diagnosis/diagnosis.dart @@ -0,0 +1,177 @@ +import 'package:lamiter/Class/Result/constitution_result.dart'; +import 'package:lamiter/Class/Result/health_index_result.dart'; +import 'package:lamiter/Class/Result/physical_index_result.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Class/Result/sleep_well_index_result.dart'; +import 'package:lamiter/Class/Result/stress_index_result.dart'; +import 'package:lamiter/Class/Result/urban_disease_result.dart'; +import 'package:lamiter/Class/Result/zong_fu_index_result.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_report_page.dart'; + +enum DiagnosisType { + healthIndex, + physicalIndex, + urbanDisease, + stressIndex, + sleepWellIndex, + constitution, + zongFuIndex, + postureIssue, +} + +class Diagnosis { + String? id; + String managerId; + String? managerName; + String? clientId; + DateTime startTime; + DateTime? endTime; + HealthIndexResult? healthIndexResult; + PhysicalIndexResult? physicalIndexResult; + UrbanDiseaseResult? urbanDiseaseResult; + StressIndexResult? stressIndexResult; + SleepWellIndexResult? sleepWellIndexResult; + ConstitutionResult? constitutionResult; + ZongFuIndexResult? zongFuIndexResult; + PostureIssueResult? postureIssueResult; + + Diagnosis({ + this.id, + required this.managerId, + this.managerName, + this.clientId, + this.endTime, + this.healthIndexResult, + this.physicalIndexResult, + this.urbanDiseaseResult, + this.stressIndexResult, + this.sleepWellIndexResult, + this.constitutionResult, + this.zongFuIndexResult, + this.postureIssueResult, + }) : startTime = DateTime.now(); + + Diagnosis.fromJson(Map json) + : id = json['_id'] as String?, + managerId = json['managerId'] as String, + managerName = json['managerName'] as String?, + clientId = json['clientId'] as String?, + startTime = DateTime.parse(json['startTime'] as String).toLocal(), + healthIndexResult = json["healthIndexResult"] != null + ? HealthIndexResult.fromJson(json["healthIndexResult"]) + : null, + physicalIndexResult = json["physicalIndexResult"] != null + ? PhysicalIndexResult.fromJson(json["physicalIndexResult"]) + : null, + urbanDiseaseResult = json["urbanDiseaseResult"] != null + ? UrbanDiseaseResult.fromJson(json["urbanDiseaseResult"]) + : null, + stressIndexResult = json["stressIndexResult"] != null + ? StressIndexResult.fromJson(json["stressIndexResult"]) + : null, + sleepWellIndexResult = json["sleepWellIndexResult"] != null + ? SleepWellIndexResult.fromJson(json["sleepWellIndexResult"]) + : null, + constitutionResult = json["constitutionResult"] != null + ? ConstitutionResult.fromJson(json["constitutionResult"]) + : null, + zongFuIndexResult = json["zongFuIndexResult"] != null + ? ZongFuIndexResult.fromJson(json["zongFuIndexResult"]) + : null, + postureIssueResult = json["postureIssueResult"] != null + ? PostureIssueResult.fromJson(json["postureIssueResult"]) + : null; + + Map toJson() => { + '_id': id, + 'managerId': managerId, + 'clientId': clientId, + 'startTime': startTime.toUtc().toIso8601String(), + 'endTime': endTime!.toUtc().toIso8601String(), + 'healthIndexResult': healthIndexResult?.toJson(), + 'physicalIndexResult': physicalIndexResult?.toJson(), + 'urbanDiseaseResult': urbanDiseaseResult?.toJson(), + 'stressIndexResult': stressIndexResult?.toJson(), + 'sleepWellIndexResult': sleepWellIndexResult?.toJson(), + 'constitutionResult': constitutionResult?.toJson(), + 'zongFuIndexResult': zongFuIndexResult?.toJson(), + 'postureIssueResult': postureIssueResult?.toJson(), + }; + + void update(DiagnosisType type, dynamic result) { + switch (type) { + case DiagnosisType.healthIndex: + try { + result as HealthIndexResult; + healthIndexResult = result; + } catch (e) {} + break; + case DiagnosisType.physicalIndex: + try { + result as PhysicalIndexResult; + physicalIndexResult = result; + } catch (e) {} + break; + case DiagnosisType.urbanDisease: + try { + result as UrbanDiseaseResult; + urbanDiseaseResult = result; + } catch (e) {} + break; + case DiagnosisType.stressIndex: + try { + result as StressIndexResult; + stressIndexResult = result; + } catch (e) {} + break; + case DiagnosisType.sleepWellIndex: + try { + result as SleepWellIndexResult; + sleepWellIndexResult = result; + } catch (e) {} + break; + case DiagnosisType.constitution: + try { + result as ConstitutionResult; + constitutionResult = result; + } catch (e) {} + break; + case DiagnosisType.zongFuIndex: + try { + result as ZongFuIndexResult; + zongFuIndexResult = result; + } catch (e) {} + break; + case DiagnosisType.postureIssue: + try { + result as PostureIssueResult; + postureIssueResult = result; + } catch (e) {} + } + } + + bool isReadyToSubmit() { + return healthIndexResult != null || + physicalIndexResult != null || + urbanDiseaseResult != null || + stressIndexResult != null || + sleepWellIndexResult != null || + constitutionResult != null || + postureIssueResult != null; + } + + bool hasReport(DiagnosisReportType type) { + switch (type) { + case DiagnosisReportType.basicHealth: + return (healthIndexResult != null || + physicalIndexResult != null || + urbanDiseaseResult != null || + stressIndexResult != null || + sleepWellIndexResult != null); + case DiagnosisReportType.constitution: + return constitutionResult != null; + case DiagnosisReportType.postureIssue: + return postureIssueResult != null; + } + } +} diff --git a/lib/Class/Diagnosis/meridian.dart b/lib/Class/Diagnosis/meridian.dart new file mode 100644 index 0000000..67d8fd9 --- /dev/null +++ b/lib/Class/Diagnosis/meridian.dart @@ -0,0 +1,15 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class Meridian extends Entity { + Meridian({ + required super.id, + required super.name, + }); + + // Named constructor from JSON + Meridian.fromJson(Map json) + : super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Diagnosis/posture_issue.dart b/lib/Class/Diagnosis/posture_issue.dart new file mode 100644 index 0000000..b5789b8 --- /dev/null +++ b/lib/Class/Diagnosis/posture_issue.dart @@ -0,0 +1,22 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class PostureIssue extends Entity { + final List relatedSymptomsIds; // todo db + + PostureIssue({ + required super.id, + required super.name, + required this.relatedSymptomsIds, + }); + + // Named constructor from JSON + PostureIssue.fromJson(Map json) + : relatedSymptomsIds = (json['relatedSymptomsIds'] as List?) + ?.map((item) => item as String) + .toList() ?? + [], + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Diagnosis/symptom.dart b/lib/Class/Diagnosis/symptom.dart new file mode 100644 index 0000000..f351819 --- /dev/null +++ b/lib/Class/Diagnosis/symptom.dart @@ -0,0 +1,19 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class Symptom extends Entity { + final String description; + + Symptom({ + required super.id, + required super.name, + required this.description, + }); + + // Named constructor from JSON + Symptom.fromJson(Map json) + : description = json['description'] as String, + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Diagnosis/urban_disease.dart b/lib/Class/Diagnosis/urban_disease.dart new file mode 100644 index 0000000..37f62dc --- /dev/null +++ b/lib/Class/Diagnosis/urban_disease.dart @@ -0,0 +1,28 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class UrbanDisease extends Entity { + final String info; + final String WMTips; + final String TCMTips; + final String urbanHealthTips; + + UrbanDisease({ + required super.id, + required super.name, + required this.info, + required this.WMTips, + required this.TCMTips, + required this.urbanHealthTips, + }); + + // Named constructor from JSON + UrbanDisease.fromJson(Map json) + : info = json['info'] as String, + WMTips = json['WMTips'] as String, + TCMTips = json['TCMTips'] as String, + urbanHealthTips = json['urbanHealthTips'] as String, + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Diagnosis/zong_fu_constitution.dart b/lib/Class/Diagnosis/zong_fu_constitution.dart new file mode 100644 index 0000000..4e159dd --- /dev/null +++ b/lib/Class/Diagnosis/zong_fu_constitution.dart @@ -0,0 +1,28 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class ZongFuConstitution extends Entity { + final String constitutionId; + final String? zongFuOrganId; + final List relatedAcupointsIds; // todo db + + ZongFuConstitution({ + required super.id, + required super.name, + required this.constitutionId, + required this.zongFuOrganId, + required this.relatedAcupointsIds, + }); + + // Named constructor from JSON + ZongFuConstitution.fromJson(Map json) + : relatedAcupointsIds = (json['relatedAcupointsIds'] as List?) + ?.map((item) => item as String) + .toList() ?? + [], + constitutionId = json['constitutionId'] as String, + zongFuOrganId = json['zongFuOrganId'] as String?, + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Diagnosis/zong_fu_organ.dart b/lib/Class/Diagnosis/zong_fu_organ.dart new file mode 100644 index 0000000..25b8fb7 --- /dev/null +++ b/lib/Class/Diagnosis/zong_fu_organ.dart @@ -0,0 +1,15 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class ZongFuOrgan extends Entity { + ZongFuOrgan({ + required super.id, + required super.name, + }); + + // Named constructor from JSON + ZongFuOrgan.fromJson(Map json) + : super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Entity/entity.dart b/lib/Class/Entity/entity.dart new file mode 100644 index 0000000..528548a --- /dev/null +++ b/lib/Class/Entity/entity.dart @@ -0,0 +1,13 @@ +class Entity { + final String id; + final String name; + + const Entity({ + required this.id, + required this.name, + }); + + Entity.fromJson(Map json) + : id = json["id"] as String, + name = json["name"] as String; +} diff --git a/lib/Class/Form/constitution_form.dart b/lib/Class/Form/constitution_form.dart new file mode 100644 index 0000000..68885bf --- /dev/null +++ b/lib/Class/Form/constitution_form.dart @@ -0,0 +1,5 @@ +class ConstitutionForm { + late String? tongueImage; + + ConstitutionForm(); +} diff --git a/lib/Class/Form/health_index_form.dart b/lib/Class/Form/health_index_form.dart new file mode 100644 index 0000000..8bc102e --- /dev/null +++ b/lib/Class/Form/health_index_form.dart @@ -0,0 +1,17 @@ +import 'package:lamiter/Class/Question/scq.dart'; + +class HealthIndexForm { + late Map scores; + + HealthIndexForm() { + scores = { + '_health_index_question_1': SCQAnswer(index: 0, score: 0), + '_health_index_question_2': SCQAnswer(index: 0, score: 0), + '_health_index_question_3': SCQAnswer(index: 0, score: 0), + '_health_index_question_4': SCQAnswer(index: 0, score: 0), + '_health_index_question_5': SCQAnswer(index: 0, score: 0), + '_health_index_question_6': SCQAnswer(index: 0, score: 0), + '_health_index_question_7': SCQAnswer(index: 0, score: 0), + }; + } +} diff --git a/lib/Class/Form/physical_index_form.dart b/lib/Class/Form/physical_index_form.dart new file mode 100644 index 0000000..cf66cb9 --- /dev/null +++ b/lib/Class/Form/physical_index_form.dart @@ -0,0 +1,13 @@ +class PhysicalIndexForm { + late int age; + late bool gender; + late num weight; + late num height; + + PhysicalIndexForm() { + age = 0; + gender = false; + weight = 0; + height = 0; + } +} diff --git a/lib/Class/Form/posture_issue_form.dart b/lib/Class/Form/posture_issue_form.dart new file mode 100644 index 0000000..c1e6d7f --- /dev/null +++ b/lib/Class/Form/posture_issue_form.dart @@ -0,0 +1,6 @@ +class PostureIssueForm { + late String? frontViewImage; + late String? sideViewImage; + + PostureIssueForm(); +} diff --git a/lib/Class/Form/sleep_well_index_form.dart b/lib/Class/Form/sleep_well_index_form.dart new file mode 100644 index 0000000..cf0be39 --- /dev/null +++ b/lib/Class/Form/sleep_well_index_form.dart @@ -0,0 +1,17 @@ +import 'package:lamiter/Class/Question/scq.dart'; + +class SleepWellIndexForm { + late Map scores; + + SleepWellIndexForm() { + scores = { + '_sleep_well_index_question_1': SCQAnswer(index: 0, score: 0), + '_sleep_well_index_question_2': SCQAnswer(index: 0, score: 0), + '_sleep_well_index_question_3': SCQAnswer(index: 0, score: 0), + '_sleep_well_index_question_4': SCQAnswer(index: 0, score: 0), + '_sleep_well_index_question_5': SCQAnswer(index: 0, score: 0), + '_sleep_well_index_question_6': SCQAnswer(index: 0, score: 0), + '_sleep_well_index_question_7': SCQAnswer(index: 0, score: 0), + }; + } +} diff --git a/lib/Class/Form/stress_index_form.dart b/lib/Class/Form/stress_index_form.dart new file mode 100644 index 0000000..14f4a47 --- /dev/null +++ b/lib/Class/Form/stress_index_form.dart @@ -0,0 +1,27 @@ +import 'package:lamiter/Class/Question/scq.dart'; + +class StressIndexForm { + late Map scores; + + StressIndexForm() { + scores = { + '_stress_index_question_1': SCQAnswer(index: 0, score: 0), + '_stress_index_question_2': SCQAnswer(index: 0, score: 0), + '_stress_index_question_3': SCQAnswer(index: 0, score: 0), + '_stress_index_question_4': SCQAnswer(index: 0, score: 0), + '_stress_index_question_5': SCQAnswer(index: 0, score: 0), + '_stress_index_question_6': SCQAnswer(index: 0, score: 0), + '_stress_index_question_7': SCQAnswer(index: 0, score: 0), + '_stress_index_question_8': SCQAnswer(index: 0, score: 0), + '_stress_index_question_9': SCQAnswer(index: 0, score: 0), + '_stress_index_question_10': SCQAnswer(index: 0, score: 0), + '_stress_index_question_11': SCQAnswer(index: 0, score: 0), + '_stress_index_question_12': SCQAnswer(index: 0, score: 0), + '_stress_index_question_13': SCQAnswer(index: 0, score: 0), + '_stress_index_question_14': SCQAnswer(index: 0, score: 0), + '_stress_index_question_15': SCQAnswer(index: 0, score: 0), + '_stress_index_question_16': SCQAnswer(index: 0, score: 0), + '_stress_index_question_17': SCQAnswer(index: 0, score: 0), + }; + } +} diff --git a/lib/Class/Form/urban_disease_form.dart b/lib/Class/Form/urban_disease_form.dart new file mode 100644 index 0000000..d025648 --- /dev/null +++ b/lib/Class/Form/urban_disease_form.dart @@ -0,0 +1,46 @@ +class UrbanDiseaseForm { + late Map diseaseStatus; + + UrbanDiseaseForm() { + diseaseStatus = { + '_urban_disease_diabetes': false, + '_urban_disease_hypertension': false, + '_urban_disease_hyperlipidemia': false, + '_urban_disease_stroke': false, + '_urban_disease_insomnia': false, + '_urban_disease_acne': false, + '_urban_disease_eczema': false, + '_urban_disease_atopic_dermatitis': false, + '_urban_disease_cataract': false, + '_urban_disease_macular_degeneration': false, + '_urban_disease_glaucoma': false, + '_urban_disease_cold': false, + '_urban_disease_influenza': false, + '_urban_disease_asthma': false, + '_urban_disease_allergic_rhinitis': false, + '_urban_disease_urticaria': false, + '_urban_disease_headache': false, + '_urban_disease_migraine': false, + '_urban_disease_vertigo': false, + '_urban_disease_sinusitis': false, + '_urban_disease_bronchitis': false, + '_urban_disease_diarrhea': false, + '_urban_disease_hemorrhoid': false, + '_urban_disease_bloating_and_indigestion': false, + '_urban_disease_gastroesophageal_reflux_disease': false, + '_urban_disease_irritable_bowel_syndrome': false, + '_urban_disease_osteoporosis': false, + '_urban_disease_frozen_shoulder': false, + '_urban_disease_osteoarthritis': false, + '_urban_disease_rheumatoid_arthritis': false, + '_urban_disease_mouse_hand': false, + '_urban_disease_trigger_finger': false, + '_urban_disease_menstrual_pain': false, + '_urban_disease_menopause_syndrome': false, + '_urban_disease_uterine_fibroid': false, + '_urban_disease_urinary_tract_infection': false, + '_urban_disease_benign_prostatic_hyperplasia': false, + '_urban_disease_constipation': false + }; + } +} diff --git a/lib/Class/Form/zong_fu_index_form.dart b/lib/Class/Form/zong_fu_index_form.dart new file mode 100644 index 0000000..3fdedb3 --- /dev/null +++ b/lib/Class/Form/zong_fu_index_form.dart @@ -0,0 +1,40 @@ +import 'package:lamiter/Class/Question/scq.dart'; + +class ZongFuIndexForm { + late Map scores; + + ZongFuIndexForm() { + scores = { + '_zong_fu_index_liver_question_1': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_liver_question_2': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_liver_question_3': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_liver_question_4': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_liver_question_5': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_liver_question_6': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_heart_question_1': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_heart_question_2': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_heart_question_3': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_heart_question_4': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_heart_question_5': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_heart_question_6': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_spleen_question_1': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_spleen_question_2': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_spleen_question_3': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_spleen_question_4': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_spleen_question_5': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_spleen_question_6': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_lung_question_1': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_lung_question_2': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_lung_question_3': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_lung_question_4': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_lung_question_5': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_lung_question_6': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_kidney_question_1': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_kidney_question_2': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_kidney_question_3': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_kidney_question_4': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_kidney_question_5': SCQAnswer(index: 0, score: 0), + '_zong_fu_index_kidney_question_6': SCQAnswer(index: 0, score: 0), + }; + } +} diff --git a/lib/Class/Question/dtq.dart b/lib/Class/Question/dtq.dart new file mode 100644 index 0000000..d4e315b --- /dev/null +++ b/lib/Class/Question/dtq.dart @@ -0,0 +1,163 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:intl/intl.dart'; +import 'package:lamiter/Class/Question/question.dart'; +import 'package:lamiter/Class/Question/question_layout_attributes.dart'; +import 'package:lamiter/Component/q_title.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +// ignore: must_be_immutable +class DTQ extends Question { + final GlobalKey DTQKey = GlobalKey(); + final TextEditingController controller = TextEditingController(); + final DTQLayoutAttributes attributes; + + DTQ({ + super.key, + required super.id, + required super.required, + super.answer, + required this.attributes, + }); + + String? _datetime2string(DateTime? dt) { + return dt == null ? null : DateFormat("yyyy/MM/dd").format(dt); + } + + @override + void setAnswerLayout(DateTime? _answer) { + if (_answer == null) return; + answer = _answer; + controller.text = _datetime2string(_answer) ?? ''; + } + + @override + void lockAnswerLayouot() { + DTQKey.currentState?.lockAnswer(); + } + + @override + Widget build(BuildContext context) { + void layoutSetAnswer(DateTime? layoutAnswer) { + answer = layoutAnswer; + context.read().refresh(); + } + + return _Layout( + key: DTQKey, + controller: controller, + attributes: attributes, + datetime2string: _datetime2string, + setAnswer: layoutSetAnswer, + ); + } +} + +class DTQLayoutAttributes extends QuestionLayoutAttributes { + final String? hintText; + + DTQLayoutAttributes({ + super.title, + required super.required, + this.hintText, + }); +} + +class _Layout extends StatefulWidget { + // Date-time question + final TextEditingController controller; + final DTQLayoutAttributes attributes; + final String? Function(DateTime?) datetime2string; + final Function(DateTime?) setAnswer; + + const _Layout({ + super.key, + required this.controller, + required this.attributes, + required this.datetime2string, + required this.setAnswer, + }); + + @override + State<_Layout> createState() => DTQLayoutState(); +} + +class DTQLayoutState extends State<_Layout> { + bool _readOnly = false; + + void lockAnswer() { + _readOnly = true; + setState(() {}); + } + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Form( + child: Column( + children: [ + widget.attributes.title != null && widget.attributes.title!.isNotEmpty + ? QTitle( + title: languageProvider + .getLocaleString(widget.attributes.title!), + readOnly: _readOnly, + required: widget.attributes.required, + ) + : const SizedBox.shrink(), + TextFormField( + controller: widget.controller, + minLines: 1, + autocorrect: false, + readOnly: true, // not allow use directly typing + keyboardType: TextInputType.none, + decoration: InputDecoration( + isDense: true, + hintText: languageProvider + .getLocaleString(widget.attributes.hintText ?? ''), + hintStyle: context.bL!.copyWith(color: context.primary), + enabledBorder: + UnderlineInputBorder(borderSide: context.QBorderSide), + ), + onTap: () { + if (_readOnly) return; + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) => SizedBox( + height: 216.sp, + child: Container( + padding: EdgeInsets.only(bottom: 18.sp), + decoration: BoxDecoration( + color: context.secondary, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), + ), + child: CupertinoDatePicker( + initialDateTime: DateTime.now(), + maximumDate: DateTime.now(), + mode: CupertinoDatePickerMode.date, + use24hFormat: true, + showDayOfWeek: false, + onDateTimeChanged: (DateTime newDate) { + widget.setAnswer(newDate); + widget.controller.text = + widget.datetime2string(newDate) ?? ''; + setState(() {}); + }, + ), + ), + ), + ); + }, + ), + ], + ), + ); + } +} diff --git a/lib/Class/Question/iq.dart b/lib/Class/Question/iq.dart new file mode 100644 index 0000000..7ca5757 --- /dev/null +++ b/lib/Class/Question/iq.dart @@ -0,0 +1,220 @@ +import 'dart:convert'; +import 'dart:io'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:lamiter/Class/Question/question.dart'; +import 'package:lamiter/Class/Question/question_layout_attributes.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Component/q_title.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +// ignore: must_be_immutable +class IQ extends Question { + final GlobalKey IQKey = GlobalKey(); + final IQLayoutAttributes attributes; + + IQ({ + super.key, + required super.id, + required super.required, + super.answer, + required this.attributes, + }); + + @override + void setAnswerLayout(String? _answer) { + answer = _answer; + IQKey.currentState?.setAnswer(_answer); + } + + @override + void lockAnswerLayouot() { + IQKey.currentState?.lockAnswer(); + } + + @override + Widget build(BuildContext context) { + void layoutSetAnswer(String? layoutAnswer) { + answer = layoutAnswer; + context.read().refresh(); + } + + return _Layout( + key: IQKey, + attributes: attributes, + setAnswer: layoutSetAnswer, + ); + } +} + +enum IQLayoutShape { circle, rectangle } + +class IQLayoutAttributes extends QuestionLayoutAttributes { + final num sizeWidthFactor; + final IQLayoutShape shape; + + IQLayoutAttributes({ + super.title, + required super.required, + required this.sizeWidthFactor, + this.shape = IQLayoutShape.circle, + }); +} + +class _Layout extends StatefulWidget { + // Short description question + final IQLayoutAttributes attributes; + final Function(String?) setAnswer; + + const _Layout({ + super.key, + required this.attributes, + required this.setAnswer, + }); + + @override + State<_Layout> createState() => IQLayoutState(); +} + +class IQLayoutState extends State<_Layout> { + bool _readOnly = false; + String? _answer; + + void setAnswer(String? img64) { + _answer = img64; + setState(() {}); + } + + void lockAnswer() { + _readOnly = true; + setState(() {}); + } + + Future imageHandler(ImageSource source) async { + final returnedImage = await ImagePicker().pickImage(source: source); + if (returnedImage == null) return; + final bytes = await File(returnedImage.path).readAsBytes(); + _answer = base64Encode(bytes); + widget.setAnswer(_answer); + setState(() {}); + //File(returnedImage.path) + } + + Container noImageContainer(double size, IQLayoutShape shape) { + return Container( + width: size, + height: size, + decoration: BoxDecoration( + color: context.secondary.withOpacity(0.15), + shape: shape == IQLayoutShape.circle + ? BoxShape.circle + : BoxShape.rectangle, + border: Border.all(color: context.tertiary), + borderRadius: + shape == IQLayoutShape.circle ? null : BorderRadius.circular(5.sp), + ), + child: Icon( + Icons.camera_alt_rounded, + size: size / 4.5, + color: context.primary, + ), + ); + } + + Container hasImageContainer(String img64, double size, IQLayoutShape shape) { + return Container( + width: size, + height: size, + decoration: BoxDecoration( + image: DecorationImage( + image: MemoryImage(base64Decode(img64), scale: 1), //todo + fit: BoxFit.cover, + ), + shape: shape == IQLayoutShape.circle + ? BoxShape.circle + : BoxShape.rectangle, + border: Border.all(color: context.tertiary), + borderRadius: + shape == IQLayoutShape.circle ? null : BorderRadius.circular(5.sp), + ), + ); + } + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + return Form( + child: Column( + children: [ + widget.attributes.title != null && widget.attributes.title!.isNotEmpty + ? QTitle( + title: languageProvider + .getLocaleString(widget.attributes.title!), + readOnly: _readOnly, + required: widget.attributes.required, + ) + : const SizedBox.shrink(), + GestureDetector( + onTap: () { + if (_readOnly) return; + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) => CupertinoActionSheet( + actions: [ + CupertinoActionSheetAction( + child: Text(AppLocalizations.of(context).use_camera), + onPressed: () { + Navigator.pop(context); + imageHandler(ImageSource.camera); + }, + ), + CupertinoActionSheetAction( + child: Text(AppLocalizations.of(context).browse_gallery), + onPressed: () { + Navigator.pop(context); + imageHandler(ImageSource.gallery); + }, + ), + ], + cancelButton: CupertinoActionSheetAction( + isDefaultAction: true, + child: const Text('取消'), + onPressed: () { + Navigator.pop(context); + }, + ), + ), + ); + }, + // todo + // onScaleStart: (details) { + // print(details); + // }, + // onScaleUpdate: (details) { + // print(details); + // }, + child: AspectRatio( + aspectRatio: 1, + child: _answer == null + ? noImageContainer( + context + .width(widget.attributes.sizeWidthFactor.toDouble()), + widget.attributes.shape) + : hasImageContainer( + _answer!, + context + .width(widget.attributes.sizeWidthFactor.toDouble()), + widget.attributes.shape), + ), + ), + ].separator(SizedBox(height: 3.sp)).toList(), + ), + ); + } +} diff --git a/lib/Class/Question/question.dart b/lib/Class/Question/question.dart new file mode 100644 index 0000000..1f1e168 --- /dev/null +++ b/lib/Class/Question/question.dart @@ -0,0 +1,21 @@ +import 'package:flutter/cupertino.dart'; + +// ignore: must_be_immutable +abstract class Question extends StatelessWidget { + final String id; + final bool required; + T? answer; + + Question({ + super.key, + required this.id, + required this.required, + this.answer, + }); + + void setAnswerLayout(T? answer); + void lockAnswerLayouot(); + bool isAnswerRequiredAndLegal() { + return !required || (answer != null); + } +} diff --git a/lib/Class/Question/question_decoder.dart b/lib/Class/Question/question_decoder.dart new file mode 100644 index 0000000..7710551 --- /dev/null +++ b/lib/Class/Question/question_decoder.dart @@ -0,0 +1,185 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Question/dtq.dart'; +import 'package:lamiter/Class/Question/iq.dart'; +import 'package:lamiter/Class/Question/question.dart'; +import 'package:lamiter/Class/Question/scq.dart'; +import 'package:lamiter/Class/Question/sdq.dart'; +import 'package:lamiter/Class/Question/tfq.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; + +class QuestionDecoder { + TextInputType _getSDQKeybaordType(int id) { + /* + TextInputType.text = 0 + TextInputType.multiline = 1 + TextInputType.name = 2 + TextInputType.number = 3 + TextInputType.emailAddress = 4 + */ + switch (id) { + case 0: + return TextInputType.text; + case 1: + return TextInputType.multiline; + case 2: + return TextInputType.name; + case 3: + return TextInputType.number; + case 4: + return TextInputType.emailAddress; + case 5: + return const TextInputType.numberWithOptions(decimal: true); + default: + return TextInputType.text; + } + } + + TextCapitalization _getSDQTextCapitalization(int id) { + /* + TextCapitalization.none = 0 + TextCapitalization.words = 1 + TextCapitalization.sentences = 2 + */ + switch (id) { + case 0: + return TextCapitalization.none; + case 1: + return TextCapitalization.words; + case 2: + return TextCapitalization.sentences; + default: + return TextCapitalization.none; + } + } + + SDQValidator _getSDQValidator(int id) { + switch (id) { + case 0: + return SDQValidator.none; + case 1: + return SDQValidator.nonNull; + case 2: + return SDQValidator.email; + case 3: + return SDQValidator.phoneNumber; + case 4: + return SDQValidator.positiveNumber; + default: + return SDQValidator.none; + } + } + + IQLayoutShape _getIQLayoutShape(int id) { + switch (id) { + case 0: + return IQLayoutShape.circle; + case 1: + return IQLayoutShape.rectangle; + default: + return IQLayoutShape.circle; + } + } + + List decode(List response) { + List form = []; + for (final questionJson in response) { + final layoutJson = questionJson['layoutAttributes']; + switch (questionJson['layoutType']) { + case 'sdq': + form.add( + SDQ( + id: questionJson['_id'], + required: questionJson['required'] ?? false, + validator: _getSDQValidator(questionJson['validator'] ?? 0), + attributes: SDQLayoutAttributes( + title: layoutJson['title'], + required: questionJson['required'] ?? false, + hintText: layoutJson['hintText'], + keyboardType: + _getSDQKeybaordType(layoutJson['keyboardType'] ?? 0), + textCapitalization: _getSDQTextCapitalization( + layoutJson['textCapitalization'] ?? 0), + maxLines: layoutJson['maxLines'] ?? 1, + obscureText: layoutJson['obscureText'] ?? false, + ), + ), + ); + break; + case 'tfq': + form.add( + TFQ( + id: questionJson['_id'], + required: questionJson['required'] ?? false, + attributes: TFQLayoutAttributes( + title: layoutJson['title'], + required: questionJson['required'] ?? false, + trueIcon: layoutJson['trueIcon'] != null + ? IconData( + layoutJson['trueIcon'], + fontFamily: 'MaterialIcons', + ) + : null, + falseIcon: layoutJson['falseIcon'] != null + ? IconData( + layoutJson['falseIcon'], + fontFamily: 'MaterialIcons', + ) + : null, + ), + ), + ); + break; + case 'dtq': + form.add( + DTQ( + id: questionJson['_id'], + required: questionJson['required'] ?? false, + attributes: DTQLayoutAttributes( + title: layoutJson['title'], + required: questionJson['required'] ?? false, + hintText: layoutJson['hintText'], + ), + ), + ); + break; + case 'iq': + form.add( + IQ( + id: questionJson['_id'], + required: questionJson['required'] ?? false, + attributes: IQLayoutAttributes( + title: layoutJson['title'], + required: questionJson['required'] ?? false, + sizeWidthFactor: layoutJson['sizeWidthFactor'], + shape: _getIQLayoutShape(layoutJson['shape'] ?? 0), + ), + ), + ); + break; + case 'scq': + form.add( + SCQ( + id: questionJson['_id'], + required: questionJson['required'] ?? false, + attributes: SCQLayoutAttributes( + title: layoutJson['title'], + required: questionJson['required'] ?? false, + options: (layoutJson['options'] as List?) + ?.map((option) => option as String) + .toList() ?? + [], + scores: (layoutJson['scores'] as List?) + ?.map((score) => score as int) + .toList() ?? + [], + ), + ), + ); + break; + default: + break; + } + } + return form; + } +} diff --git a/lib/Class/Question/question_layout_attributes.dart b/lib/Class/Question/question_layout_attributes.dart new file mode 100644 index 0000000..5ba2b2c --- /dev/null +++ b/lib/Class/Question/question_layout_attributes.dart @@ -0,0 +1,9 @@ +abstract class QuestionLayoutAttributes { + final String? title; + final bool required; + + QuestionLayoutAttributes({ + required this.title, + required this.required, + }); +} diff --git a/lib/Class/Question/scq.dart b/lib/Class/Question/scq.dart new file mode 100644 index 0000000..1d4bf03 --- /dev/null +++ b/lib/Class/Question/scq.dart @@ -0,0 +1,164 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Question/question.dart'; +import 'package:lamiter/Class/Question/question_layout_attributes.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Component/q_title.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +// ignore: must_be_immutable +class SCQ extends Question { + final GlobalKey SCQKey = GlobalKey(); + final SCQLayoutAttributes attributes; + + SCQ({ + super.key, + required super.id, + required super.required, + super.answer, + required this.attributes, + }); + + @override + void setAnswerLayout(SCQAnswer? _answer) { + if (_answer == null) return; + answer = _answer; + SCQKey.currentState?.setAnswer(_answer); + } + + @override + void lockAnswerLayouot() { + SCQKey.currentState?.lockAnswer(); + } + + @override + Widget build(BuildContext context) { + void layoutSetAnswer(SCQAnswer? layoutAnswer) { + answer = layoutAnswer; + context.read().refresh(); + } + + return _Layout( + key: SCQKey, + attributes: attributes, + setAnswer: layoutSetAnswer, + ); + } +} + +class SCQLayoutAttributes extends QuestionLayoutAttributes { + final List options; + final List scores; + + SCQLayoutAttributes({ + super.title, + required super.required, + required this.options, + required this.scores, + }); +} + +class _Layout extends StatefulWidget { + // Single choice question + final SCQLayoutAttributes attributes; + final Function(SCQAnswer?) setAnswer; + + const _Layout({ + super.key, + required this.attributes, + required this.setAnswer, + }); + + @override + State<_Layout> createState() => SCQLayoutState(); +} + +class SCQLayoutState extends State<_Layout> with AutomaticKeepAliveClientMixin { + bool _readOnly = false; + SCQAnswer? _answer; + + void setAnswer(SCQAnswer? answer) { + _answer = answer; + setState(() {}); + } + + void lockAnswer() { + _readOnly = true; + setState(() {}); + } + + @override + Widget build(BuildContext context) { + super.build(context); + final languageProvider = Provider.of(context); + return Form( + child: Column( + children: [ + // question title + widget.attributes.title != null && widget.attributes.title!.isNotEmpty + ? QTitle( + title: languageProvider + .getLocaleString(widget.attributes.title!), + readOnly: _readOnly, + required: widget.attributes.required, + ) + : const SizedBox.shrink(), + // answer TextField + IgnorePointer( + ignoring: _readOnly, + child: DropdownButtonFormField( + items: List.generate(widget.attributes.options.length, (index) { + return DropdownMenuItem( + value: SCQAnswer( + index: index, + score: widget.attributes.scores[index], + ), + child: Text( + languageProvider + .getLocaleString(widget.attributes.options[index]), + softWrap: true, + overflow: TextOverflow.ellipsis, + ), + ); + }), + value: _answer, + decoration: InputDecoration( + isDense: true, + enabledBorder: UnderlineInputBorder( + borderSide: BorderSide( + color: context.primary.withOpacity(0.35), + ), + ), + ), + onChanged: (SCQAnswer? answer) { + setAnswer(answer); + widget.setAnswer(answer); + }, + ), + ), + ], + ), + ); + } + + @override + bool get wantKeepAlive => true; +} + +class SCQAnswer { + int index; + int score; + + SCQAnswer({required this.index, required this.score}); + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is SCQAnswer && other.index == index && other.score == score; + } + + @override + int get hashCode => index.hashCode ^ score.hashCode; +} diff --git a/lib/Class/Question/sdq.dart b/lib/Class/Question/sdq.dart new file mode 100644 index 0000000..29d32f2 --- /dev/null +++ b/lib/Class/Question/sdq.dart @@ -0,0 +1,213 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Question/question.dart'; +import 'package:lamiter/Class/Question/question_layout_attributes.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/string.dart'; +import 'package:lamiter/Component/q_title.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +// ignore: must_be_immutable +class SDQ extends Question { + final GlobalKey SDQKey = GlobalKey(); + final TextEditingController controller = TextEditingController(); + final SDQLayoutAttributes attributes; + final SDQValidator validator; + + SDQ({ + super.key, + required super.id, + required super.required, + super.answer, + required this.attributes, + required this.validator, + }); + + @override + void setAnswerLayout(String? _answer) { + if (_answer == null) return; + answer = _answer; + controller.text = _answer; + } + + @override + void lockAnswerLayouot() { + SDQKey.currentState?.lockAnswer(); + } + + @override + Widget build(BuildContext context) { + void layoutSetAnswer(String? layoutAnswer) { + if (validator.validator(layoutAnswer) != null) { + answer = null; + } else { + answer = layoutAnswer; + } + context.read().refresh(); + } + + return _Layout( + key: SDQKey, + controller: controller, + attributes: attributes, + validator: validator, + setAnswer: layoutSetAnswer, + ); + } +} + +enum SDQValidator { + none, + nonNull, + email, + phoneNumber, + positiveNumber; + + const SDQValidator(); + + String? validator(value) { + switch (this) { + case SDQValidator.none: + return null; + case SDQValidator.nonNull: + if (value == null || value.isEmpty) return '此欄位為必填。'; + return null; + case SDQValidator.email: + if (value == null || value.isEmpty) return '此欄位為必填。'; + value as String; + if (!value.validateEmail()) return '請輸入正確的電子郵件格式。'; + return null; + case SDQValidator.phoneNumber: + if (value == null || value.isEmpty) return '此欄位為必填。'; + value as String; + if (!value.validatePhoneNumber()) return '請輸入正確的電話號碼。'; + return null; + case SDQValidator.positiveNumber: + if (value == null || value.isEmpty) return '此欄位為必填。'; + value as String; + try { + if (double.parse(value) <= 0) return '請輸入大於零的數字。'; + } catch (e) { + return '請輸入有效數字。'; + } + return null; + default: + return null; + } + } +} + +class SDQLayoutAttributes extends QuestionLayoutAttributes { + final String? hintText; + final int maxLines; + final bool obscureText; + final TextInputType keyboardType; + final TextCapitalization textCapitalization; + + SDQLayoutAttributes({ + super.title, + required super.required, + this.hintText, + this.maxLines = 1, + this.obscureText = false, + this.keyboardType = TextInputType.text, + this.textCapitalization = TextCapitalization.none, + }); +} + +class _Layout extends StatefulWidget { + // Short description question + final TextEditingController controller; + final SDQLayoutAttributes attributes; + final SDQValidator validator; + final Function(String?) setAnswer; + + const _Layout({ + super.key, + required this.controller, + required this.attributes, + required this.validator, + required this.setAnswer, + }); + + @override + State<_Layout> createState() => SDQLayoutState(); +} + +class SDQLayoutState extends State<_Layout> { + bool _readOnly = false; + + late bool _obscureText; + + @override + void initState() { + super.initState(); + _obscureText = widget.attributes.obscureText; + setState(() {}); + } + + void lockAnswer() { + _readOnly = true; + setState(() {}); + } + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Form( + child: Column( + children: [ + // question title + widget.attributes.title != null && widget.attributes.title!.isNotEmpty + ? QTitle( + title: languageProvider + .getLocaleString(widget.attributes.title!), + readOnly: _readOnly, + required: widget.attributes.required, + ) + : const SizedBox.shrink(), + // answer TextField + TextFormField( + controller: widget.controller, + minLines: 1, + maxLines: + widget.attributes.obscureText ? 1 : widget.attributes.maxLines, + obscureText: _obscureText, + autocorrect: false, + readOnly: _readOnly, + keyboardType: widget.attributes.keyboardType, + textCapitalization: widget.attributes.textCapitalization, + // textInputAction: TextInputAction.done, + decoration: InputDecoration( + isDense: false, + contentPadding: REdgeInsets.only(top: 9.sp, bottom: 6.sp), + hintText: languageProvider + .getLocaleString(widget.attributes.hintText ?? ''), + hintStyle: context.bL!.copyWith(color: context.primary), + enabledBorder: + UnderlineInputBorder(borderSide: context.QBorderSide), + suffixIcon: widget.attributes.obscureText + ? GestureDetector( + onTap: () => setState( + () { + _obscureText = !_obscureText; + }, + ), + child: Icon( + _obscureText ? Icons.visibility : Icons.visibility_off, + ), + ) + : null, + ), + validator: widget.validator.validator, + autovalidateMode: AutovalidateMode.onUserInteraction, + onChanged: widget.setAnswer, + ), + ], + ), + ); + } +} diff --git a/lib/Class/Question/tfq.dart b/lib/Class/Question/tfq.dart new file mode 100644 index 0000000..a036e31 --- /dev/null +++ b/lib/Class/Question/tfq.dart @@ -0,0 +1,162 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Question/question.dart'; +import 'package:lamiter/Class/Question/question_layout_attributes.dart'; +import 'package:lamiter/Component/tfq_title.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +// ignore: must_be_immutable +class TFQ extends Question { + final GlobalKey TFQKey = GlobalKey(); + final TFQLayoutAttributes attributes; + + TFQ({ + super.key, + required super.id, + required super.required, + super.answer = false, + required this.attributes, + }); + + @override + void setAnswerLayout(bool? _answer) { + if (_answer == null) return; + answer = _answer; + TFQKey.currentState?.setAnswer(_answer); + } + + @override + void lockAnswerLayouot() { + TFQKey.currentState?.lockAnswer(); + } + + @override + bool isAnswerRequiredAndLegal() { + return true; + } + + @override + Widget build(BuildContext context) { + void layoutSetAnswer(bool? layoutAnswer) { + answer = layoutAnswer; + context.read().refresh(); + } + + return _Layout( + key: TFQKey, + attributes: attributes, + setAnswer: layoutSetAnswer, + ); + } +} + +class TFQLayoutAttributes extends QuestionLayoutAttributes { + final IconData? trueIcon; + final IconData? falseIcon; + + TFQLayoutAttributes({ + super.title, + required super.required, + this.trueIcon, + this.falseIcon, + }); +} + +class _Layout extends StatefulWidget { + // True or false question + final TFQLayoutAttributes attributes; + final Function(bool?) setAnswer; + + const _Layout({ + super.key, + required this.attributes, + required this.setAnswer, + }); + + @override + State<_Layout> createState() => TFQLayoutState(); +} + +class TFQLayoutState extends State<_Layout> with AutomaticKeepAliveClientMixin { + bool _answer = false; + bool _readOnly = false; + + late Icon _trueIconDisplay; + late Icon _falseIconDisplay; + + @override + void initState() { + super.initState(); + _trueIconDisplay = Icon(widget.attributes.trueIcon); + _falseIconDisplay = Icon(widget.attributes.falseIcon); + } + + void setAnswer(bool? b) { + _answer = b ?? false; + widget.setAnswer(b); // form notifier + _trueIconDisplay = Icon( + widget.attributes.trueIcon, + color: context.inverseSurface.withOpacity(_answer ? 1 : 0.35), + ); + _falseIconDisplay = Icon( + widget.attributes.falseIcon, + color: context.inverseSurface.withOpacity(_answer ? 0.35 : 1), + ); + setState(() {}); + } + + void lockAnswer() { + _readOnly = true; + setState(() {}); + } + + @override + Widget build(BuildContext context) { + super.build(context); + final languageProvider = Provider.of(context); + + return Form( + child: Container( + padding: EdgeInsets.only(bottom: 6.sp), + decoration: BoxDecoration(border: Border(bottom: context.QBorderSide)), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TFQTitle( + title: languageProvider + .getLocaleString(widget.attributes.title ?? ''), + readOnly: _readOnly, + required: widget.attributes.required, + ), + Row( + children: [ + _falseIconDisplay, + CupertinoSwitch( + // This bool value toggles the switch. + value: _answer, + trackColor: widget.attributes.falseIcon == null + ? context.primary + : CupertinoColors.destructiveRed, + activeColor: widget.attributes.falseIcon == null + ? CupertinoColors.activeGreen + : CupertinoColors.activeBlue, + onChanged: (bool? value) { + if (_readOnly) return; + setAnswer(value); + }, + ), + _trueIconDisplay + ], + ), + ], + ), + ), + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/Class/Result/constitution_result.dart b/lib/Class/Result/constitution_result.dart new file mode 100644 index 0000000..c421c3d --- /dev/null +++ b/lib/Class/Result/constitution_result.dart @@ -0,0 +1,180 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Diagnosis/constitution.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/constitution_provider.dart'; +import 'package:provider/provider.dart'; + +class ConstitutionResult { + String? id; + int balanced_constitution_score; + int qi_deficiency_score; + int yang_deficiency_score; + int yin_deficiency_score; + int blood_deficiency_score; + int damp_heat_score; + int phlegm_damp_score; + int blood_stasis_score; + int qi_stagnation_score; + int sensitive_constitution_score; + + ConstitutionResult({ + this.balanced_constitution_score = 0, + this.qi_deficiency_score = 0, + this.yang_deficiency_score = 0, + this.yin_deficiency_score = 0, + this.blood_deficiency_score = 0, + this.damp_heat_score = 0, + this.phlegm_damp_score = 0, + this.blood_stasis_score = 0, + this.qi_stagnation_score = 0, + this.sensitive_constitution_score = 0, + }); + + ConstitutionResult.fromJson(Map json) + : balanced_constitution_score = + json['balanced_constitution_score'] as int, + qi_deficiency_score = json['qi_deficiency_score'] as int, + yang_deficiency_score = json['yang_deficiency_score'] as int, + yin_deficiency_score = json['yin_deficiency_score'] as int, + blood_deficiency_score = json['blood_deficiency_score'] as int, + damp_heat_score = json['damp_heat_score'] as int, + phlegm_damp_score = json['phlegm_damp_score'] as int, + blood_stasis_score = json['blood_stasis_score'] as int, + qi_stagnation_score = json['qi_stagnation_score'] as int, + sensitive_constitution_score = + json['sensitive_constitution_score'] as int; + + Map toJson() => { + 'balanced_constitution_score': balanced_constitution_score, + 'qi_deficiency_score': qi_deficiency_score, + 'yang_deficiency_score': yang_deficiency_score, + 'yin_deficiency_score': yin_deficiency_score, + 'blood_deficiency_score': blood_deficiency_score, + 'damp_heat_score': damp_heat_score, + 'phlegm_damp_score': phlegm_damp_score, + 'blood_stasis_score': blood_stasis_score, + 'qi_stagnation_score': qi_stagnation_score, + 'sensitive_constitution_score': sensitive_constitution_score, + }; + + // void debug() { + // print(balanced_constitution_score); + // print(qi_deficiency_score); + // print(yang_deficiency_score); + // print(yin_deficiency_score); + // print(blood_deficiency_score); + // print(damp_heat_score); + // print(phlegm_damp_score); + // print(blood_stasis_score); + // print(qi_stagnation_score); + // print(sensitive_constitution_score); + // } + + final String balanced_title = '體質平衡指數'; + final int max_score = 100; + final int status_length = 3; + final List balanced_status_colors = [ + Colors.red, + Colors.amber, + Colors.green + ]; + final List balanced_status_thresh = [50, 25, 25]; + final List balanced_status_labels = ['需要醫療介入', '亞健康', '健康']; + final List constitution_status_colors = [ + Colors.grey, + Colors.amber, + Colors.red, + ]; + final int constitution_low_threshold = 75; + final int constitution_high_threshold = 100; + + int _balanced_status() { + int temp = balanced_constitution_score; + for (int i = 0; i < status_length; i++) { + if (temp <= balanced_status_thresh[i]) return i; + temp -= balanced_status_thresh[i]; + } + return status_length - 1; + } + + double balanced_factor() { + return balanced_constitution_score.toDouble() / max_score.toDouble(); + } + + Color balanced_color() { + return balanced_status_colors[_balanced_status()]; + } + + String balanced_label() { + return balanced_status_labels[_balanced_status()]; + } + + int _constitution_status(Constitution constitution) { + int score = constitution_score(constitution); + if (score < constitution_low_threshold) return 0; + if (score < constitution_high_threshold) return 1; + return 2; + } + + Color constitution_color(Constitution constitution) { + return constitution_status_colors[_constitution_status(constitution)]; + } + + int constitution_score(Constitution constitution) { + switch (constitution.id) { + case 'qi_deficiency': + return qi_deficiency_score; + case 'yang_deficiency': + return yang_deficiency_score; + case 'yin_deficiency': + return yin_deficiency_score; + case 'blood_deficiency': + return blood_deficiency_score; + case 'damp_heat': + return damp_heat_score; + case 'phlegm_damp': + return phlegm_damp_score; + case 'blood_stasis': + return blood_stasis_score; + case 'qi_stagnation': + return qi_stagnation_score; + case 'sensitive_constitution': + return sensitive_constitution_score; + default: + return 0; + } + } + + List main_constitutions(BuildContext context) { + final constitutions = context.read().elements; + return constitutions + .where( + (constitution) => + constitution_score(constitution) >= constitution_high_threshold, + ) + .toList(); + } + + List sub_constitutions(BuildContext context) { + final constitutions = context.read().elements; + return constitutions + .where( + (constitution) => + constitution_score(constitution) >= constitution_low_threshold && + constitution_score(constitution) < constitution_high_threshold, + ) + .toList(); + } + + List report_display_constitutions(BuildContext context) { + final constitutions = context.read().elements; + return constitutions; + } + + // 用於產品/課程/療程的篩選對應 + List risk_constitutions(BuildContext context) { + List temp = []; + temp.addAll(main_constitutions(context)); + temp.addAll(sub_constitutions(context)); + return temp; + } +} diff --git a/lib/Class/Result/health_index_result.dart b/lib/Class/Result/health_index_result.dart new file mode 100644 index 0000000..4032167 --- /dev/null +++ b/lib/Class/Result/health_index_result.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Form/health_index_form.dart'; +import 'package:lamiter/Class/Question/scq.dart'; + +class HealthIndexResult { + int score; + + HealthIndexResult({ + required this.score, + }); + + HealthIndexResult.fromJson(Map json) + : score = json["score"] as int; + + Map toJson() => {'score': score}; + + HealthIndexResult.fromForm(HealthIndexForm form) + : score = _calculateScore(form); + + static int _calculateScore(HealthIndexForm form) { + int score = 0; + form.scores.forEach((String qid, SCQAnswer answer) { + score += answer.score; + }); + return score; + } + + final int max_score = 14; + final int status_length = 3; + final List status_thresh = [3, 5, 6]; + final List status_colors = [Colors.red, Colors.amber, Colors.green]; + final List status_labels = ['不健康', '尚可', '健康']; + + int _status() { + int temp = score; + for (int i = 0; i < status_length; i++) { + if (temp <= status_thresh[i]) return i; + temp -= status_thresh[i]; + } + return status_length - 1; + } + + double factor() { + return score.toDouble() / max_score.toDouble(); + } + + Color color() { + return status_colors[_status()]; + } + + String label() { + return status_labels[_status()]; + } +} diff --git a/lib/Class/Result/physical_index_result.dart b/lib/Class/Result/physical_index_result.dart new file mode 100644 index 0000000..f6ec192 --- /dev/null +++ b/lib/Class/Result/physical_index_result.dart @@ -0,0 +1,84 @@ +import 'dart:math'; +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Form/physical_index_form.dart'; + +class PhysicalIndexResult { + num BMI; + num BMR; + + PhysicalIndexResult({ + required this.BMI, + required this.BMR, + }); + + PhysicalIndexResult.fromJson(Map json) + : BMI = json["bmi"] as num, + BMR = json["bmr"] as num; + + Map toJson() => {'bmi': BMI, 'bmr': BMR}; + + PhysicalIndexResult.fromForm(PhysicalIndexForm form) + : BMI = _calculateBMI( + form.weight, + form.height, + ), + BMR = _calculateBMR( + form.gender, + form.age, + form.weight, + form.height, + ); + + static num _calculateBMI(num weight, num height) { + num value = weight.toDouble() / pow((height.toDouble() / 100), 2); + return double.parse(value.toStringAsFixed(1)); + } + + static num _calculateBMR(bool gender, int age, num weight, num height) { + num value; + if (gender) { + //male + value = 66 + 13.7 * weight.toDouble() + 5 * height.toDouble() - 6.8 * age; + } else { + //female + value = + 65 + 9.6 * weight.toDouble() + 1.7 * height.toDouble() - 4.7 * age; + } + return double.parse(value.toStringAsFixed(1)); + } + + final double BMI_low_threshold = 18.5; + final double BMI_high_threshold = 24; + final int BMI_status_length = 3; + final List BMI_status_thresh = [1, 1, 1]; + final List BMI_status_colors = [Colors.blue, Colors.green, Colors.red]; + final List BMI_status_labels = ['偏低', '標準', '偏高']; + + int _BMI_status() { + if (BMI < BMI_low_threshold) return 0; + if (BMI <= BMI_high_threshold) return 1; + return 2; + } + + double BMI_factor() { + final factor = (BMI < 0) + ? 0 + : (BMI <= 18.5) + ? BMI / BMI_low_threshold + : (BMI <= BMI_high_threshold) + ? ((BMI - BMI_low_threshold) / + (BMI_high_threshold - BMI_low_threshold) + + 1) + : (min(1, ((BMI - BMI_high_threshold) / BMI_high_threshold)) + + 2); + return factor / 3; + } + + Color BMI_color() { + return BMI_status_colors[_BMI_status()]; + } + + String BMI_label() { + return BMI_status_labels[_BMI_status()]; + } +} diff --git a/lib/Class/Result/posture_issue_result.dart b/lib/Class/Result/posture_issue_result.dart new file mode 100644 index 0000000..19cea15 --- /dev/null +++ b/lib/Class/Result/posture_issue_result.dart @@ -0,0 +1,551 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Diagnosis/posture_issue.dart'; +import 'package:lamiter/Class/Diagnosis/symptom.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/posture_issue_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/symptom_provider.dart'; +import 'package:provider/provider.dart'; + +class PostureIssueResult { + String? id; + int? head_tilt_score; + int? forward_head_posture_score; + int? uneven_shoulders_score; + int? rounded_shoulders_score; + int? pelvic_tilt_score; + int? spinal_misalignment_score; + int? hyperextended_knee_score; + int? right_leg_shape_score; + int? left_leg_shape_score; + String? right_leg_shape_note; + String? left_leg_shape_note; + List? front_muscles; + List? front_muscles_note; + List? side_muscles; + List? side_muscles_note; + List? back_muscles; + List? back_muscles_note; + List? zang_fu_organs; + List? meridians; + num? head_tilt_angle; + num? forward_head_posture_angle; + num? uneven_shoulders_angle; + num? rounded_shoulders_angle; + num? pelvic_tilt_angle; + num? spinal_misalignment_angle; + num? hyperextended_knee_angle; + num? right_thigh_angle; + num? right_calf_angle; + num? left_thigh_angle; + num? left_calf_angle; + + PostureIssueResult({ + // 體態症狀 + this.head_tilt_score, + this.forward_head_posture_score, + this.uneven_shoulders_score, + this.rounded_shoulders_score, + this.pelvic_tilt_score, + this.spinal_misalignment_score, + this.hyperextended_knee_score, + this.right_leg_shape_score, + this.left_leg_shape_score, + this.right_leg_shape_note, + this.left_leg_shape_note, + // 體態角度 + this.head_tilt_angle, + this.forward_head_posture_angle, + this.uneven_shoulders_angle, + this.rounded_shoulders_angle, + this.pelvic_tilt_angle, + this.spinal_misalignment_angle, + this.hyperextended_knee_angle, + this.right_thigh_angle, + this.right_calf_angle, + this.left_thigh_angle, + this.left_calf_angle, + // 肌肉 + this.front_muscles, + this.front_muscles_note, + this.side_muscles, + this.side_muscles_note, + this.back_muscles, + this.back_muscles_note, + // 臟腑 + this.zang_fu_organs, + // 經絡 + this.meridians, + }); + + PostureIssueResult.fromJson(Map json) + : head_tilt_score = json['head_tilt_score'] as int?, + forward_head_posture_score = json['forward_head_posture_score'] as int?, + uneven_shoulders_score = json['uneven_shoulders_score'] as int?, + rounded_shoulders_score = json['rounded_shoulders_score'] as int?, + pelvic_tilt_score = json['pelvic_tilt_score'] as int?, + spinal_misalignment_score = json['spinal_misalignment_score'] as int?, + hyperextended_knee_score = json['hyperextended_knee_score'] as int?, + right_leg_shape_score = json['right_leg_shape_score'] as int?, + left_leg_shape_score = json['left_leg_shape_score'] as int?, + right_leg_shape_note = json['right_leg_shape_note'] as String?, + left_leg_shape_note = json['left_leg_shape_note'] as String?, + front_muscles = (json['front_muscles'] as List?) + ?.map((muscle) => muscle as String) + .toList(), + front_muscles_note = (json['front_muscles_note'] as List?) + ?.map((note) => note as String) + .toList(), + side_muscles = (json['side_muscles'] as List?) + ?.map((muscle) => muscle as String) + .toList(), + side_muscles_note = (json['side_muscles_note'] as List?) + ?.map((note) => note as String) + .toList(), + back_muscles = (json['back_muscles'] as List?) + ?.map((muscle) => muscle as String) + .toList(), + back_muscles_note = (json['back_muscles_note'] as List?) + ?.map((note) => note as String) + .toList(), + zang_fu_organs = (json['zang_fu_organs'] as List?) + ?.map((organ) => organ as String) + .toList(), + meridians = (json['meridians'] as List?) + ?.map((meridian) => meridian as String) + .toList(), + head_tilt_angle = json['head_tilt_angle'] as num?, + forward_head_posture_angle = json['forward_head_posture_angle'] as num?, + uneven_shoulders_angle = json['uneven_shoulders_angle'] as num?, + rounded_shoulders_angle = json['rounded_shoulders_angle'] as num?, + pelvic_tilt_angle = json['pelvic_tilt_angle'] as num?, + spinal_misalignment_angle = json['spinal_misalignment_angle'] as num?, + hyperextended_knee_angle = json['hyperextended_knee_angle'] as num?, + right_thigh_angle = json['right_thigh_angle'] as num?, + right_calf_angle = json['right_calf_angle'] as num?, + left_thigh_angle = json['left_thigh_angle'] as num?, + left_calf_angle = json['left_calf_angle'] as num?; + + Map toJson() => { + 'head_tilt_score': head_tilt_score, + 'forward_head_posture_score': forward_head_posture_score, + 'uneven_shoulders_score': uneven_shoulders_score, + 'rounded_shoulders_score': rounded_shoulders_score, + 'pelvic_tilt_score': pelvic_tilt_score, + 'spinal_misalignment_score': spinal_misalignment_score, + 'hyperextended_knee_score': hyperextended_knee_score, + 'right_leg_shape_score': right_leg_shape_score, + 'left_leg_shape_score': left_leg_shape_score, + 'right_leg_shape_note': right_leg_shape_note, + 'left_leg_shape_note': left_leg_shape_note, + 'head_tilt_angle': head_tilt_angle, + 'forward_head_posture_angle': forward_head_posture_angle, + 'uneven_shoulders_angle': uneven_shoulders_angle, + 'rounded_shoulders_angle': rounded_shoulders_angle, + 'pelvic_tilt_angle': pelvic_tilt_angle, + 'spinal_misalignment_angle': spinal_misalignment_angle, + 'hyperextended_knee_angle': hyperextended_knee_angle, + 'right_thigh_angle': right_thigh_angle, + 'right_calf_angle': right_calf_angle, + 'left_thigh_angle': left_thigh_angle, + 'left_calf_angle': left_calf_angle, + 'front_muscles': front_muscles, + 'front_muscles_note': front_muscles_note, + 'side_muscles': side_muscles, + 'side_muscles_note': side_muscles_note, + 'back_muscles': back_muscles, + 'back_muscles_note': back_muscles_note, + 'zang_fu_organs': zang_fu_organs, + 'meridians': meridians, + }; + + void debug() { + print(head_tilt_score); + print(forward_head_posture_score); + print(uneven_shoulders_score); + print(rounded_shoulders_score); + print(pelvic_tilt_score); + print(spinal_misalignment_score); + print(hyperextended_knee_score); + print(right_leg_shape_score); + print(left_leg_shape_score); + } + + List posture_issue_status_colors = [ + Colors.green, + Colors.amber, + Colors.red + ]; + List posture_issue_status_labels = ['輕度', '中度', '重度']; + final int posture_issue_low_threshold = 50; + final int posture_issue_high_threshold = 75; + + String posture_issue_label(PostureIssue postureIssue) { + return posture_issue_status_labels[ + _posture_issue_status(posture_issue_score(postureIssue))]; + } + + Color posture_issue_color(PostureIssue postureIssue) { + return posture_issue_status_colors[ + _posture_issue_status(posture_issue_score(postureIssue))]; + } + + List posture_issue_symptoms( + BuildContext context, PostureIssue postureIssue) { + List temp = []; + for (var id in postureIssue.relatedSymptomsIds) { + final symptom = context.read().findWithId(id); + if (symptom != null) temp.add(symptom); + } + return temp; + } + + String posture_issue_angle_note(PostureIssue postureIssue) { + switch (postureIssue.id) { + case 'head_tilt': + return head_tilt_angle != null + ? _left_right_angle_note(head_tilt_angle!) + : ''; + case 'forward_head_posture': + return forward_head_posture_angle != null + ? _angle_note(forward_head_posture_angle!) + : ''; + case 'uneven_shoulders': + return uneven_shoulders_angle != null + ? _left_right_angle_note(uneven_shoulders_angle!) + : ''; + case 'rounded_shoulders': + return rounded_shoulders_angle != null + ? _angle_note(rounded_shoulders_angle!) + : ''; + case 'pelvic_tilt': + return pelvic_tilt_angle != null + ? _left_right_angle_note(pelvic_tilt_angle!) + : ''; + case 'spinal_misalignment': + return spinal_misalignment_angle != null + ? _angle_note(spinal_misalignment_angle!) + : ''; + case 'hyperextended_knee': + return hyperextended_knee_angle != null + ? _angle_note(hyperextended_knee_angle!) + : ''; + case 'left_o_legs': + return _left_leg_angle_note(); + case 'left_x_legs': + return _left_leg_angle_note(); + case 'left_xo_legs': + return _left_leg_angle_note(); + case 'right_o_legs': + return _right_leg_angle_note(); + case 'right_x_legs': + return _right_leg_angle_note(); + case 'right_xo_legs': + return _right_leg_angle_note(); + default: + return ''; + } + } + + Widget posture_issue_image_widget(PostureIssue postureIssue, double height) { + String assetHeader = 'assets/x_ray'; + String fileExtension = '.png'; + String imagePath = ''; + bool flip = false; + try { + if (posture_issue_score(postureIssue) >= posture_issue_high_threshold) { + imagePath = '$assetHeader/${postureIssue.id}/high_risk$fileExtension'; + if (postureIssue.id.contains('o_legs')) { + imagePath = '$assetHeader/o_legs/high_risk$fileExtension'; + } + if (postureIssue.id.contains('x_legs')) { + imagePath = '$assetHeader/x_legs/high_risk$fileExtension'; + } + if (postureIssue.id.contains('xo_legs')) { + imagePath = '$assetHeader/xo_legs/high_risk$fileExtension'; + } + } else if ((postureIssue.id == 'head_tilt' || + postureIssue.id == 'pelvic_tilt' || + postureIssue.id == 'uneven_shoulders') && + posture_issue_score(postureIssue) >= posture_issue_low_threshold) { + imagePath = '$assetHeader/${postureIssue.id}/medium_risk$fileExtension'; + } else { + imagePath = '$assetHeader/${postureIssue.id}/normal$fileExtension'; + if (postureIssue.id.contains('o_legs')) { + imagePath = '$assetHeader/o_legs/normal$fileExtension'; + } + if (postureIssue.id.contains('x_legs')) { + imagePath = '$assetHeader/x_legs/normal$fileExtension'; + } + if (postureIssue.id.contains('xo_legs')) { + imagePath = '$assetHeader/xo_legs/normal$fileExtension'; + } + } + } catch (e) { + imagePath = 'assets/default_error.png'; + } + + if (postureIssue.id == 'head_tilt') { + flip = (head_tilt_angle ?? 0) > 0; + } + if (postureIssue.id == 'uneven_shoulders') { + flip = (uneven_shoulders_angle ?? 0) < 0; + } + if (postureIssue.id == 'pelvic_tilt') { + flip = (pelvic_tilt_angle ?? 0) > 0; + } + + return Transform.flip( + flipX: flip, + child: Container( + height: height, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(5), + image: DecorationImage( + image: AssetImage(imagePath), + fit: BoxFit.contain, + ), + ), + ), + ); + } + + String _left_right_angle_note(num angle) { + if (angle > 0) { + return '(向左傾 $angle 度)'; + } else { + return '(向右傾 ${angle.abs()} 度)'; + } + } + + String _angle_note(num angle) { + return '(傾斜 ${angle.abs()} 度)'; + } + + String _left_leg_angle_note() { + return '(左大腿傾斜 ${left_thigh_angle?.abs()} 度,左小腿傾斜 ${left_calf_angle?.abs()} 度)'; + } + + String _right_leg_angle_note() { + return '(右大腿傾斜 ${right_thigh_angle?.abs()} 度,右小腿傾斜 ${right_calf_angle?.abs()} 度)'; + } + + int posture_issue_score(PostureIssue postureIssue) { + switch (postureIssue.id) { + case 'head_tilt': + return head_tilt_score ?? 0; + case 'forward_head_posture': + return forward_head_posture_score ?? 0; + case 'uneven_shoulders': + return uneven_shoulders_score ?? 0; + case 'rounded_shoulders': + return rounded_shoulders_score ?? 0; + case 'pelvic_tilt': + return pelvic_tilt_score ?? 0; + case 'spinal_misalignment': + return spinal_misalignment_score ?? 0; + case 'hyperextended_knee': + return hyperextended_knee_score ?? 0; + case 'left_o_legs': + return left_leg_shape_score ?? 0; + case 'left_x_legs': + return left_leg_shape_score ?? 0; + case 'left_xo_legs': + return left_leg_shape_score ?? 0; + case 'right_o_legs': + return right_leg_shape_score ?? 0; + case 'right_x_legs': + return right_leg_shape_score ?? 0; + case 'right_xo_legs': + return right_leg_shape_score ?? 0; + default: + return -1; + } + } + + int _posture_issue_status(int score) { + if (score < 0) return -1; + if (score < posture_issue_low_threshold) return 0; + if (score < posture_issue_high_threshold) return 1; + return 2; + } + + List screenshot_should_display_posture_issue( + BuildContext context) { + final postureIssues = context.read().elements; + var temp = postureIssues + .where((postureIssue) => + _posture_issue_status(posture_issue_score(postureIssue)) > 0) + .toList(); + + // leg, ignoring... + final o_legs = context.read().findWithId('o_legs'); + final x_legs = context.read().findWithId('x_legs'); + final xo_legs = context.read().findWithId('xo_legs'); + if (left_leg_shape_score != null && + _posture_issue_status(left_leg_shape_score!) > 0) { + final left_legs_posture_issue = left_leg_shape_note == 'O' + ? o_legs + : left_leg_shape_note == 'X' + ? x_legs + : xo_legs; + final leftLegsPostureIssue = PostureIssue( + id: 'left_' + (left_legs_posture_issue?.id ?? ''), + name: '左腿腿型(${left_legs_posture_issue?.name ?? ''})', + relatedSymptomsIds: left_legs_posture_issue?.relatedSymptomsIds ?? [], + ); + temp.add(leftLegsPostureIssue); + } + if (right_leg_shape_score != null && + _posture_issue_status(right_leg_shape_score!) > 0) { + final right_legs_posture_issue = right_leg_shape_note == 'O' + ? o_legs + : right_leg_shape_note == 'X' + ? x_legs + : xo_legs; + final rightLegsPostureIssue = PostureIssue( + id: 'right_' + (right_legs_posture_issue?.id ?? ''), + name: '右腿腿型(${right_legs_posture_issue?.name ?? ''})', + relatedSymptomsIds: right_legs_posture_issue?.relatedSymptomsIds ?? [], + ); + temp.add(rightLegsPostureIssue); + } + return temp; + } + + List report_display_posture_issues(BuildContext context) { + final postureIssues = context.read().elements; + var temp = postureIssues + .where((postureIssue) => + _posture_issue_status(posture_issue_score(postureIssue)) > -1) + .toList(); + + // leg, ignoring... + final o_legs = context.read().findWithId('o_legs'); + final x_legs = context.read().findWithId('x_legs'); + final xo_legs = context.read().findWithId('xo_legs'); + // if (left_leg_shape_score != null && + // _posture_issue_status(left_leg_shape_score!) > 1) { + final left_legs_posture_issue = left_leg_shape_note == 'O' + ? o_legs + : left_leg_shape_note == 'X' + ? x_legs + : xo_legs; + final leftLegsPostureIssue = PostureIssue( + id: 'left_' + (left_legs_posture_issue?.id ?? ''), + name: '左腿腿型(${left_legs_posture_issue?.name ?? ''})', + relatedSymptomsIds: left_legs_posture_issue?.relatedSymptomsIds ?? [], + ); + temp.add(leftLegsPostureIssue); + // } + // if (right_leg_shape_score != null && + // _posture_issue_status(right_leg_shape_score!) > 1) { + final right_legs_posture_issue = right_leg_shape_note == 'O' + ? o_legs + : right_leg_shape_note == 'X' + ? x_legs + : xo_legs; + final rightLegsPostureIssue = PostureIssue( + id: 'right_' + (right_legs_posture_issue?.id ?? ''), + name: '右腿腿型(${right_legs_posture_issue?.name ?? ''})', + relatedSymptomsIds: right_legs_posture_issue?.relatedSymptomsIds ?? [], + ); + temp.add(rightLegsPostureIssue); + // } + return temp; + } + + List risk_posture_issues(BuildContext context) { + final postureIssues = context.read().elements; + var temp = postureIssues + .where((postureIssue) => + _posture_issue_status(posture_issue_score(postureIssue)) > 0) + .toSet(); + + // leg, ignoring... + if (left_leg_shape_score != null && + _posture_issue_status(left_leg_shape_score!) > 0) { + if (left_leg_shape_note == 'O') + temp.add(context.read().findWithId('o_legs')!); + if (left_leg_shape_note == 'X') + temp.add(context.read().findWithId('x_legs')!); + if (left_leg_shape_note == 'XO') + temp.add(context.read().findWithId('xo_legs')!); + } + + if (right_leg_shape_score != null && + _posture_issue_status(right_leg_shape_score!) > 0) { + if (right_leg_shape_note == 'O') + temp.add(context.read().findWithId('o_legs')!); + if (right_leg_shape_note == 'X') + temp.add(context.read().findWithId('x_legs')!); + if (right_leg_shape_note == 'XO') + temp.add(context.read().findWithId('xo_legs')!); + } + + return temp.toList(); + } + + int muscles_status_length = 3; + List muscles_status_labels = ['視情況而定', '需放鬆', '需加強']; + List muscles_status_colors = [ + Color(0xff9DDDF7), + Colors.amber, + Colors.red + ]; + + int? trend_posture_issue_score(PostureIssue postureIssue) { + switch (postureIssue.id) { + case 'head_tilt': + return head_tilt_score; + case 'forward_head_posture': + return forward_head_posture_score; + case 'uneven_shoulders': + return uneven_shoulders_score; + case 'rounded_shoulders': + return rounded_shoulders_score; + case 'pelvic_tilt': + return pelvic_tilt_score; + case 'spinal_misalignment': + return spinal_misalignment_score; + case 'hyperextended_knee': + return hyperextended_knee_score; + case 'o_legs': + int? left_leg_score = + (left_leg_shape_note == 'O') ? left_leg_shape_score : null; + int? right_leg_score = + (right_leg_shape_note == 'O') ? right_leg_shape_score : null; + if (left_leg_score == null || right_leg_score == null) { + if (left_leg_score != null) return left_leg_score; + if (right_leg_score != null) return right_leg_score; + return null; + } + return max(left_leg_score, right_leg_score); + case 'x_legs': + int? left_leg_score = + (left_leg_shape_note == 'X') ? left_leg_shape_score : null; + int? right_leg_score = + (right_leg_shape_note == 'X') ? right_leg_shape_score : null; + if (left_leg_score == null || right_leg_score == null) { + if (left_leg_score != null) return left_leg_score; + if (right_leg_score != null) return right_leg_score; + return null; + } + return max(left_leg_score, right_leg_score); + case 'xo_legs': + int? left_leg_score = + (left_leg_shape_note == 'XO') ? left_leg_shape_score : null; + int? right_leg_score = + (right_leg_shape_note == 'XO') ? right_leg_shape_score : null; + if (left_leg_score == null || right_leg_score == null) { + if (left_leg_score != null) return left_leg_score; + if (right_leg_score != null) return right_leg_score; + return null; + } + return max(left_leg_score, right_leg_score); + default: + return null; + } + } +} diff --git a/lib/Class/Result/sleep_well_index_result.dart b/lib/Class/Result/sleep_well_index_result.dart new file mode 100644 index 0000000..eb940cd --- /dev/null +++ b/lib/Class/Result/sleep_well_index_result.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Form/sleep_well_index_form.dart'; +import 'package:lamiter/Class/Question/scq.dart'; + +class SleepWellIndexResult { + int score; + + SleepWellIndexResult({ + required this.score, + }); + + SleepWellIndexResult.fromJson(Map json) + : score = json["score"] as int; + + Map toJson() => {'score': score}; + + SleepWellIndexResult.fromForm(SleepWellIndexForm form) + : score = _calculateScore(form); + + static int _calculateScore(SleepWellIndexForm form) { + int score = 0; + form.scores.forEach((String qid, SCQAnswer answer) { + score += answer.score; + }); + return score; + } + + final int max_score = 28; + final int status_length = 4; + final List status_thresh = [7, 7, 7, 7]; + final List status_colors = [ + Colors.green, + Colors.amber, + Colors.orange, + Colors.red, + ]; + final List status_labels = [ + '無睡眠障礙', + '輕度失眠', + '中度失眠', + '嚴重失眠', + ]; + + int _status() { + int temp = score; + for (int i = 0; i < status_length; i++) { + if (temp <= status_thresh[i]) return i; + temp -= status_thresh[i]; + } + return status_length - 1; + } + + double factor() { + return score.toDouble() / max_score.toDouble(); + } + + Color color() { + return status_colors[_status()]; + } + + String label() { + return status_labels[_status()]; + } +} diff --git a/lib/Class/Result/stress_index_result.dart b/lib/Class/Result/stress_index_result.dart new file mode 100644 index 0000000..4c585ae --- /dev/null +++ b/lib/Class/Result/stress_index_result.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Form/stress_index_form.dart'; +import 'package:lamiter/Class/Question/scq.dart'; + +class StressIndexResult { + int score; + + StressIndexResult({ + required this.score, + }); + + StressIndexResult.fromJson(Map json) + : score = json["score"] as int; + + Map toJson() => {'score': score}; + + StressIndexResult.fromForm(StressIndexForm form) + : score = _calculateScore(form); + + static int _calculateScore(StressIndexForm form) { + int score = 0; + form.scores.forEach((String qid, SCQAnswer answer) { + score += answer.score; + }); + return score; + } + + final int max_score = 34; + final int status_length = 3; + final List status_thresh = [10, 5, 19]; + final List status_colors = [Colors.green, Colors.amber, Colors.red]; + final List status_labels = ['低', '中等', '高']; + final List status_infos = [ + '精神壓力程度低,但可能顯示生活缺乏刺激,較為單調沉悶,做事的動力不高。', + '精神壓力程度中等,雖然有時會感到壓力較大,但仍能應付。', + '精神壓力偏高,應反省壓力來源並尋求解決方法。', + ]; + + int _status() { + int temp = score; + for (int i = 0; i < status_length; i++) { + if (temp <= status_thresh[i]) return i; + temp -= status_thresh[i]; + } + return status_length - 1; + } + + double factor() { + return score.toDouble() / max_score.toDouble(); + } + + Color color() { + return status_colors[_status()]; + } + + String label() { + return status_labels[_status()]; + } + + String info() { + return status_infos[_status()]; + } +} diff --git a/lib/Class/Result/urban_disease_result.dart b/lib/Class/Result/urban_disease_result.dart new file mode 100644 index 0000000..c4a798a --- /dev/null +++ b/lib/Class/Result/urban_disease_result.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Form/urban_disease_form.dart'; + +class UrbanDiseaseResult { + List diseaseIds; + + UrbanDiseaseResult({ + required this.diseaseIds, + }); + + UrbanDiseaseResult.fromJson(Map json) + : diseaseIds = (json["diseaseIds"] as List?) + ?.map((item) => item as String) + .toList() ?? + []; + + Map toJson() => {'diseaseIds': diseaseIds}; + + UrbanDiseaseResult.fromForm(BuildContext context, UrbanDiseaseForm form) + : diseaseIds = _collectDiseasesIds(form); + + static List _collectDiseasesIds(UrbanDiseaseForm form) { + List diseaseIds = []; + form.diseaseStatus.forEach((String qid, bool hasDisease) { + if (hasDisease) diseaseIds.add(qid.split('_urban_disease_')[1]); + }); + return diseaseIds; + } +} diff --git a/lib/Class/Result/zong_fu_index_result.dart b/lib/Class/Result/zong_fu_index_result.dart new file mode 100644 index 0000000..0243897 --- /dev/null +++ b/lib/Class/Result/zong_fu_index_result.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Form/zong_fu_index_form.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/zong_fu_organ_provider.dart'; +import 'package:provider/provider.dart'; + +class ZongFuIndexResult { + String? id; + List zongFuOrgansIds; + + ZongFuIndexResult({ + this.id, + required this.zongFuOrgansIds, + }); + + ZongFuIndexResult.fromJson(Map json) + : zongFuOrgansIds = (json["zongFuOrgansIds"] as List?) + ?.map((item) => item as String) + .toList() ?? + []; + + Map toJson() => {'zongFuOrgansIds': zongFuOrgansIds}; + + ZongFuIndexResult.fromForm(BuildContext context, ZongFuIndexForm form) + : zongFuOrgansIds = _calculateZongFuOrgans(context, form); + + static List _calculateZongFuOrgans( + BuildContext context, + ZongFuIndexForm form, + ) { + Map zongFuScores = {}; + for (var score in form.scores.entries) { + // _zong_fu_index_${zfg.name}_question_$i + List splits = score.key.split('_'); + String zongFuOrgan = splits[4]; + if (zongFuScores.containsKey(zongFuOrgan)) { + zongFuScores[zongFuOrgan] = + zongFuScores[zongFuOrgan]! + score.value.score; + } else { + zongFuScores[zongFuOrgan] = score.value.score; + } + } + + final zongFuOrgans = context.read().elements; + List temp = []; + for (int max_score = 6; max_score > 2; max_score--) { + if (temp.length >= 2) break; + for (var zongFuOrgan in zongFuOrgans) { + if ((zongFuScores[zongFuOrgan.id] ?? -1) == max_score) { + temp.add(zongFuOrgan.id); + } + } + } + return temp; + } +} diff --git a/lib/Class/Screenshot/screenshot.dart b/lib/Class/Screenshot/screenshot.dart new file mode 100644 index 0000000..141b6df --- /dev/null +++ b/lib/Class/Screenshot/screenshot.dart @@ -0,0 +1,162 @@ +import 'dart:ui' as ui; +import 'dart:typed_data'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:image_gallery_saver/image_gallery_saver.dart'; +import 'package:lamiter/Class/Screenshot/screenshot_widget.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/constitution_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/urban_disease_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/posture_issue_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/symptom_provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class Screenshot { + final List children; + final double width = 2024; + + const Screenshot({ + required this.children, + }); + + Future screenshot(Locale locale) async { + final pngBytes = await _mergeWidgetsToPng( + children, + locale, + width: width, + pixelRatio: 1, + ); + if (pngBytes == null) return; + await ImageGallerySaver.saveImage( + pngBytes, + quality: 60, + ); + } + + // 合併多個 widget 的 PNG bytes + Future _mergeWidgetsToPng( + List widgets, + Locale locale, { + required double width, + double pixelRatio = 1.0, + }) async { + final images = []; + + // 渲染每個 widget 成為圖片 + for (var widget in widgets) { + final image = await _widgetToImage(widget, width, locale); + if (image == null) return null; + images.add(image); + } + + // 計算合併後圖像的總高度 + final totalHeight = + images.fold(0.0, (sum, img) => sum + img.height.toDouble()); + + // 創建畫布 + final recorder = ui.PictureRecorder(); + final canvas = Canvas( + recorder, + Rect.fromLTWH(0, 0, width * pixelRatio, totalHeight * pixelRatio), + ); + + // 將圖像逐一繪製到畫布 + double currentOffset = 0.0; + for (var image in images) { + final src = + Rect.fromLTWH(0, 0, image.width.toDouble(), image.height.toDouble()); + final dst = Rect.fromLTWH(0, currentOffset * pixelRatio, + width * pixelRatio, image.height.toDouble() * pixelRatio); + canvas.drawImageRect(image, src, dst, Paint()); + currentOffset += image.height.toDouble(); + } + + // 將畫布轉為圖像 + final mergedImage = await recorder.endRecording().toImage( + (width * pixelRatio).toInt(), (totalHeight * pixelRatio).toInt()); + + // 將圖像轉為 PNG bytes + final byteData = + await mergedImage.toByteData(format: ui.ImageByteFormat.png); + return byteData?.buffer.asUint8List(); + } + + // 將 widget 轉換為 PNG + Future _widgetToImage( + Widget widget, double width, Locale locale) async { + // 創建一個離屏的 RenderRepaintBoundary + final repaintBoundary = RenderRepaintBoundary(); + + // 創建一個 RenderView 並將 RepaintBoundary 作為子節點 + final renderView = RenderView( + child: RenderPositionedBox( + alignment: Alignment.center, + child: repaintBoundary, + ), + configuration: ViewConfiguration( + physicalConstraints: BoxConstraints(maxWidth: width), + logicalConstraints: BoxConstraints(maxWidth: width), + devicePixelRatio: 1.0, + ), + view: WidgetsBinding.instance.window, + ); + + // 構建 PipelineOwner + final pipelineOwner = PipelineOwner(); + renderView.attach(pipelineOwner); + renderView.prepareInitialFrame(); + // pipelineOwner.rootNode = renderView; + + // 構建 BuildOwner + final buildOwner = BuildOwner(focusManager: FocusManager()); + final constitutionProvider = ConstitutionProvider(); + await constitutionProvider.init(); + final postureIssueProvider = PostureIssueProvider(); + await postureIssueProvider.init(); + final symptomProvider = SymptomProvider(); + await symptomProvider.init(); + final urbanDiseaseProvider = UrbanDiseaseProvider(); + await urbanDiseaseProvider.init(); + + final providerWidgetTree = MultiProvider( + providers: [ + ChangeNotifierProvider(create: (context) => constitutionProvider), + ChangeNotifierProvider(create: (context) => postureIssueProvider), + ChangeNotifierProvider(create: (context) => symptomProvider), + ChangeNotifierProvider(create: (context) => urbanDiseaseProvider), + ChangeNotifierProvider(create: (context) => LanguageProvider()), + ], + child: Localizations( + delegates: const [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + locale: locale, + child: widget, + ), + ); + + final renderElement = RenderObjectToWidgetAdapter( + container: repaintBoundary, + child: providerWidgetTree, + ).attachToRenderTree(buildOwner); + + // 執行布局和繪製 + buildOwner.buildScope(renderElement); + pipelineOwner.flushLayout(); + pipelineOwner.flushCompositingBits(); + pipelineOwner.flushPaint(); + + Size size = renderElement.size ?? Size(1, 1); + final pixelRatio = width / size.width; + + // 提取圖像 + final image = await repaintBoundary.toImage(pixelRatio: pixelRatio); + return image; + } +} diff --git a/lib/Class/Screenshot/screenshot_widget.dart b/lib/Class/Screenshot/screenshot_widget.dart new file mode 100644 index 0000000..8768929 --- /dev/null +++ b/lib/Class/Screenshot/screenshot_widget.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; + +class ScreenshotWidget extends StatelessWidget { + final Widget child; + final double width; + + const ScreenshotWidget({ + super.key, + required this.child, + this.width = 2048, + }); + + @override + Widget build(BuildContext context) { + return Directionality( + textDirection: TextDirection.ltr, + child: SizedBox( + width: width, + child: child, + ), + ); + } +} diff --git a/lib/Class/Service/MedicalFacility/medical_facility.dart b/lib/Class/Service/MedicalFacility/medical_facility.dart new file mode 100644 index 0000000..e747cb5 --- /dev/null +++ b/lib/Class/Service/MedicalFacility/medical_facility.dart @@ -0,0 +1,16 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class MedicalFacility extends Entity { + String phoneNumber; + String email; + String address; + + MedicalFacility.fromJson(Map json) + : phoneNumber = json['phoneNumber'] as String, + email = json['email'] as String, + address = json['address'] as String, + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Service/SeasonalRecipe/seasonal_recipe.dart b/lib/Class/Service/SeasonalRecipe/seasonal_recipe.dart new file mode 100644 index 0000000..e3f42c8 --- /dev/null +++ b/lib/Class/Service/SeasonalRecipe/seasonal_recipe.dart @@ -0,0 +1,20 @@ +class SeasonalRecipe { + final String id; + final String constitutionId; + final String season; + final int weekIndex; + final int dayIndex; + final String breakfast; + final String lunch; + final String dinner; + + SeasonalRecipe.fromJson(Map json) + : id = json['_id'] as String, + constitutionId = json['constitutionId'] as String, + season = json['season'] as String, + weekIndex = json['weekIndex'] as int, + dayIndex = json['dayIndex'] as int, + breakfast = json['breakfast'] as String, + lunch = json['lunch'] as String, + dinner = json['dinner'] as String; +} diff --git a/lib/Class/Service/course.dart b/lib/Class/Service/course.dart new file mode 100644 index 0000000..3552fd3 --- /dev/null +++ b/lib/Class/Service/course.dart @@ -0,0 +1,11 @@ +import 'package:lamiter/Class/Service/service_item.dart'; + +class Course extends ServiceItem { + final String description; + final String image; + + Course.fromJson(super.json) + : description = json['description'] as String, + image = json['image'] as String, + super.fromJson(); +} diff --git a/lib/Class/Service/product.dart b/lib/Class/Service/product.dart new file mode 100644 index 0000000..7ae302d --- /dev/null +++ b/lib/Class/Service/product.dart @@ -0,0 +1,15 @@ +import 'package:lamiter/Class/Service/service_item.dart'; + +class Product extends ServiceItem { + final String productCategoryId; + final String productCategoryName; + final String image; + final num price; + + Product.fromJson(super.json) + : productCategoryId = json['productCategoryId'] as String, + productCategoryName = json['productCategoryName'] as String, + image = json['image'] as String, + price = json['price'] as num, + super.fromJson(); +} diff --git a/lib/Class/Service/product_category.dart b/lib/Class/Service/product_category.dart new file mode 100644 index 0000000..f000f1e --- /dev/null +++ b/lib/Class/Service/product_category.dart @@ -0,0 +1,6 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +class ProductCategory extends Entity { + ProductCategory.fromJson(Map json) + : super(id: json["id"] as String, name: json["name"] as String); +} diff --git a/lib/Class/Service/service_item.dart b/lib/Class/Service/service_item.dart new file mode 100644 index 0000000..3d39385 --- /dev/null +++ b/lib/Class/Service/service_item.dart @@ -0,0 +1,32 @@ +import 'package:lamiter/Class/Entity/entity.dart'; + +abstract class ServiceItem extends Entity { + String companyId; + String companyName; + List? urbanDiseasesIds; + List? constitutionsIds; + List? postureIssuesIds; + DateTime lastUpdateTime; + + ServiceItem.fromJson(Map json) + : companyId = json["companyId"] as String, + companyName = json["companyName"] as String, + urbanDiseasesIds = (json['urbanDiseasesIds'] as List?) + ?.map((item) => item as String) + .toList() ?? + [], + constitutionsIds = (json['constitutionsIds'] as List?) + ?.map((item) => item as String) + .toList() ?? + [], + postureIssuesIds = (json['postureIssuesIds'] as List?) + ?.map((item) => item as String) + .toList() ?? + [], + lastUpdateTime = + DateTime.parse(json['lastUpdateTime'] as String).toLocal(), + super( + id: json['_id'] as String, + name: json['name'] as String, + ); +} diff --git a/lib/Class/Service/service_item_filt_type.dart b/lib/Class/Service/service_item_filt_type.dart new file mode 100644 index 0000000..2facc6e --- /dev/null +++ b/lib/Class/Service/service_item_filt_type.dart @@ -0,0 +1,11 @@ +enum ServiceItemFiltType { + supportCompany(string: '品牌'), + productCategory(string: '種類'), + urbanDisease(string: '都會疾病'), + constitution(string: '體質'), + postureIssue(string: '體態'); + + final String string; + + const ServiceItemFiltType({required this.string}); +} diff --git a/lib/Class/Service/treatment.dart b/lib/Class/Service/treatment.dart new file mode 100644 index 0000000..102641a --- /dev/null +++ b/lib/Class/Service/treatment.dart @@ -0,0 +1,11 @@ +import 'package:lamiter/Class/Service/service_item.dart'; + +class Treatment extends ServiceItem { + final String description; + final String image; + + Treatment.fromJson(super.json) + : description = json['description'] as String, + image = json['image'] as String, + super.fromJson(); +} diff --git a/lib/Class/UsageTimer/usage_timer.dart b/lib/Class/UsageTimer/usage_timer.dart new file mode 100644 index 0000000..e089aeb --- /dev/null +++ b/lib/Class/UsageTimer/usage_timer.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; + +class UsageTime { + UsageTime._constructor(); + + static final UsageTime instance = UsageTime._constructor(); + + late DateTime startTime; + late DateTime endTime; + + void start() { + startTime = DateTime.now(); + } + + Future end(BuildContext context) async { + endTime = DateTime.now(); + final manager = context.read().self; + await API().create_usage_time(manager!.id!, startTime, endTime); + } +} diff --git a/lib/Class/User/client.dart b/lib/Class/User/client.dart new file mode 100644 index 0000000..07e0ef9 --- /dev/null +++ b/lib/Class/User/client.dart @@ -0,0 +1,57 @@ +import 'package:lamiter/Class/User/user.dart'; + +enum ClientTagType { + unspecified(name: '未指定'), + star(name: '☆'), + circle(name: '◎'), + openCircle(name: '○'), + square(name: '□'), + triangle(name: '△'), + filledSquare(name: '■'), + filledTriangle(name: '▲'); + + final String name; + const ClientTagType({required this.name}); +} + +class Client extends User { + late int tag; + + Client({ + super.id, + required super.name, + super.photo, + required super.gender, + required super.birthday, + required super.phoneNumber, + // required super.email, + super.note, + this.tag = 0, + required super.createTime, + required super.lastUpdateTime, + }); + + Client.fromJson(super.json) + : tag = json['tag'] as int? ?? 0, + super.fromJson(); + + @override + Map toJson() => { + ...super.toJson(), + 'tag': tag, + }; + + void debug() { + print('id: ${id}'); + print('photo: ${photo}'); + print('name: ${name}'); + print('gender: ${gender}'); + print('birthday: ${birthday}'); + print('phoneNumber: ${phoneNumber}'); + // print('email: ${email}'); + print('note: ${note}'); + print('tag: ${tag}'); + print('createTime: ${createTime}'); + print('lastUpdateTime: ${lastUpdateTime}'); + } +} diff --git a/lib/Class/User/manager.dart b/lib/Class/User/manager.dart new file mode 100644 index 0000000..1b3b79b --- /dev/null +++ b/lib/Class/User/manager.dart @@ -0,0 +1,16 @@ +import 'package:lamiter/Class/User/user.dart'; + +class Manager extends User { + // String account; + // String password; + // List clients; + + Manager.fromJson(super.json) + : // account = json['account'] as String, + // password = json['password'] as String, + // clients = (json['clients'] as List?) + // ?.map((item) => item as String) + // .toList() ?? + // [], + super.fromJson(); +} diff --git a/lib/Class/User/user.dart b/lib/Class/User/user.dart new file mode 100644 index 0000000..fbfae6f --- /dev/null +++ b/lib/Class/User/user.dart @@ -0,0 +1,57 @@ +abstract class User { + String? id; + String name; + String? photo; + bool gender; // true for male, false for female + DateTime? birthday; + String? phoneNumber; + // String email; + String? note; + DateTime? createTime; + DateTime? lastUpdateTime; + + User({ + this.id, + required this.name, + this.photo, + required this.gender, + required this.birthday, + required this.phoneNumber, + // required this.email, + this.note, + required this.createTime, + required this.lastUpdateTime, + }); + + // Named constructor from JSON + User.fromJson(Map json) + : id = json['_id'] as String?, + name = json['name'] as String, + photo = json['photo'] as String?, + gender = json['gender'] as bool, + birthday = json['birthday'] == null + ? null + : DateTime.parse(json['birthday'] as String).toLocal(), + phoneNumber = json['phoneNumber'] as String?, + // email = json['email'] as String, + note = json['note'] as String?, + createTime = json['createTime'] == null + ? null + : DateTime.parse(json['createTime'] as String).toLocal(), + lastUpdateTime = json['lastUpdateTime'] == null + ? null + : DateTime.parse(json['lastUpdateTime'] as String).toLocal(); + + // Method to convert to JSON + Map toJson() => { + '_id': id, + 'name': name, + 'photo': photo, + 'gender': gender, + 'birthday': birthday?.toUtc().toIso8601String(), + 'phoneNumber': phoneNumber, + 'note': note, + 'createTime': createTime?.toUtc().toIso8601String(), + 'lastUpdateTime': lastUpdateTime?.toUtc().toIso8601String(), + }; +} diff --git a/lib/Component/AppBar/client_app_bar.dart b/lib/Component/AppBar/client_app_bar.dart new file mode 100644 index 0000000..7323004 --- /dev/null +++ b/lib/Component/AppBar/client_app_bar.dart @@ -0,0 +1,69 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/circle_avator.dart'; +import 'package:lamiter/Component/logo.dart'; +import 'package:lamiter/Provider/User/Client/client_provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:provider/provider.dart'; + +class ClientAppBar extends StatelessWidget implements PreferredSizeWidget { + final bool showAccountAvatar; + + ClientAppBar({ + super.key, + this.showAccountAvatar = true, + }); + + final height = 45.sp; // musr be greater than logo height + + @override + Widget build(BuildContext context) { + final name = + context.select((provider) => provider.name); + final photo = + context.select((provider) => provider.photo); + // final client = context + // .select((provider) => provider.client); + + return AppBar( + toolbarHeight: height, + title: Logo(height: 18.sp), + surfaceTintColor: Colors.transparent, + shadowColor: Colors.black, + actions: showAccountAvatar + ? [ + Padding( + padding: EdgeInsets.only(right: 12.sp), + child: MyCircleAvator( + name: name, + photo: photo, + radius: 16.sp, + actions: [ + CupertinoActionSheetAction( + child: Text( + AppLocalizations.of(context).edit_client_profile), + onPressed: () { + Navigator.pop(context); + context.read().edit(context); + }, + ), + CupertinoActionSheetAction( + isDestructiveAction: true, + onPressed: () { + Navigator.pop(context); + context.read().logout(context); + }, + child: Text(AppLocalizations.of(context).cancel), + ), + ], + ), + ), + ] + : [], + ); + } + + @override + Size get preferredSize => Size.fromHeight(height); // + _dividerHeight); +} diff --git a/lib/Component/AppBar/company_app_bar.dart b/lib/Component/AppBar/company_app_bar.dart new file mode 100644 index 0000000..af8efc7 --- /dev/null +++ b/lib/Component/AppBar/company_app_bar.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/logo.dart'; + +class CompanyAppBar extends StatelessWidget implements PreferredSizeWidget { + final String logo; + + CompanyAppBar({ + super.key, + required this.logo, + }); + + // Must be greater than Logo's height + final height = 45.sp; + + @override + Widget build(BuildContext context) { + return AppBar( + toolbarHeight: height, + title: Logo(height: 18.sp), + surfaceTintColor: Colors.transparent, + shadowColor: Colors.black, + ); + } + + @override + Size get preferredSize => Size.fromHeight(height); // + _dividerHeight); +} diff --git a/lib/Component/AppBar/diagnosis_result_app_bar.dart b/lib/Component/AppBar/diagnosis_result_app_bar.dart new file mode 100644 index 0000000..03b4e70 --- /dev/null +++ b/lib/Component/AppBar/diagnosis_result_app_bar.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class DiagnosisResultAppBar extends StatelessWidget + implements PreferredSizeWidget { + final Function()? shareFunc; + + DiagnosisResultAppBar({ + super.key, + this.shareFunc, + }); + + final height = 45.sp; // musr be greater than logo height + + @override + Widget build(BuildContext context) { + return AppBar( + toolbarHeight: height, + title: Text( + '診斷報告', + style: TextStyle( + fontSize: 20.sp, + letterSpacing: 1.5, + fontWeight: FontWeight.normal, + ), + ), + actions: [ + Padding( + padding: EdgeInsets.only(right: 18.sp), + child: GestureDetector( + onTap: shareFunc, + child: const Icon(Icons.share), + ), + ), + ], + surfaceTintColor: Colors.transparent, + shadowColor: Colors.black, + ); + } + + @override + Size get preferredSize => Size.fromHeight(height); // + _dividerHeight); +} diff --git a/lib/Component/AppBar/lamiter_app_bar.dart b/lib/Component/AppBar/lamiter_app_bar.dart new file mode 100644 index 0000000..3d29a52 --- /dev/null +++ b/lib/Component/AppBar/lamiter_app_bar.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/logo.dart'; + +class LamiterAppBar extends StatelessWidget implements PreferredSizeWidget { + LamiterAppBar({ + super.key, + }); + + // Must be greater than Logo's height + final height = 45.sp; + + @override + Widget build(BuildContext context) { + return AppBar( + toolbarHeight: height, + title: Logo(height: 18.sp), + surfaceTintColor: Colors.transparent, + shadowColor: Colors.black, + ); + } + + @override + Size get preferredSize => Size.fromHeight(height); // + _dividerHeight); +} diff --git a/lib/Component/AppBar/manager_app_bar.dart b/lib/Component/AppBar/manager_app_bar.dart new file mode 100644 index 0000000..f10ff79 --- /dev/null +++ b/lib/Component/AppBar/manager_app_bar.dart @@ -0,0 +1,64 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/circle_avator.dart'; +import 'package:lamiter/Component/logo.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ManagerAppBar extends StatelessWidget implements PreferredSizeWidget { + ManagerAppBar({ + super.key, + }); + + // Must be greater than Logo's height + final height = 45.sp; + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + final name = languageProvider.getLocaleString( + context.select((provider) => provider.name)); + final photo = + context.select((provider) => provider.photo); + + return AppBar( + toolbarHeight: height, + title: Logo(height: 18.sp), + surfaceTintColor: Colors.transparent, + shadowColor: Colors.black, + actions: [ + Padding( + padding: EdgeInsets.only(right: 12.sp), + child: MyCircleAvator( + name: name, + photo: photo, + radius: 16.sp, + actions: [ + // CupertinoActionSheetAction( + // child: Text(AppLocalizations.of(context).edit_manager_profile), + // onPressed: () { + // Navigator.pop(context); + // context.read().edit(context); + // }, + // ), + CupertinoActionSheetAction( + isDestructiveAction: true, + onPressed: () { + Navigator.pop(context); + context.read().logout(context); + }, + child: Text(AppLocalizations.of(context).logout), + ), + ], + ), + ), + ], + ); + } + + @override + Size get preferredSize => Size.fromHeight(height); // + _dividerHeight); +} diff --git a/lib/Component/AppBar/title_app_bar.dart b/lib/Component/AppBar/title_app_bar.dart new file mode 100644 index 0000000..71db25a --- /dev/null +++ b/lib/Component/AppBar/title_app_bar.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class TitleAppBar extends StatelessWidget implements PreferredSizeWidget { + final String title; + final Widget? leading; + final List actions; + final Color shadowColor; + + TitleAppBar({ + super.key, + required this.title, + this.leading, + this.actions = const [], + this.shadowColor = Colors.black, + }); + + final height = 45.sp; // musr be greater than logo height + + @override + Widget build(BuildContext context) { + return AppBar( + toolbarHeight: height, + leading: leading, + title: Text( + title, + style: TextStyle( + fontSize: 20.sp, + letterSpacing: 1.5, + fontWeight: FontWeight.normal, + ), + ), + actions: actions, + surfaceTintColor: Colors.transparent, + shadowColor: shadowColor, + ); + } + + @override + Size get preferredSize => Size.fromHeight(height); // + _dividerHeight); +} diff --git a/lib/Component/BottomNavigationBar/client_bottom_navigation_bar.dart b/lib/Component/BottomNavigationBar/client_bottom_navigation_bar.dart new file mode 100644 index 0000000..f9f012a --- /dev/null +++ b/lib/Component/BottomNavigationBar/client_bottom_navigation_bar.dart @@ -0,0 +1,52 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ClientBottomNavigationBar extends StatelessWidget { + final int currentIndex; + final Function(int)? onTap; + + const ClientBottomNavigationBar({ + super.key, + required this.currentIndex, + this.onTap, + }); + + @override + Widget build(BuildContext context) { + final List items = [ + BottomNavigationBarItem( + icon: const Icon(Icons.home_filled), + label: AppLocalizations.of(context).home, + ), + BottomNavigationBarItem( + icon: const Icon(CupertinoIcons.book_fill), + label: AppLocalizations.of(context).learning_resource, + ), + BottomNavigationBarItem( + icon: const Icon(Icons.add_circle_rounded), + label: AppLocalizations.of(context).diagnosis_and_solution, + ), + BottomNavigationBarItem( + icon: const Icon(CupertinoIcons.cart_fill), + label: AppLocalizations.of(context).mall, + ), + BottomNavigationBarItem( + icon: const Icon(CupertinoIcons.profile_circled), + label: AppLocalizations.of(context).client_profile, + ), + ]; + + return CupertinoTabBar( + items: items, + onTap: onTap, + border: null, + iconSize: 24.sp, + currentIndex: currentIndex, + backgroundColor: context.surface.withOpacity(0.75), + activeColor: context.inverseSurface.withOpacity(0.75), + ); + } +} diff --git a/lib/Component/BottomNavigationBar/company_bottom_navigation_bar.dart b/lib/Component/BottomNavigationBar/company_bottom_navigation_bar.dart new file mode 100644 index 0000000..d641599 --- /dev/null +++ b/lib/Component/BottomNavigationBar/company_bottom_navigation_bar.dart @@ -0,0 +1,47 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class CompanyBottomNavigationBar extends StatelessWidget { + final int currentIndex; + final Function(int)? onTap; + + const CompanyBottomNavigationBar({ + super.key, + required this.currentIndex, + this.onTap, + }); + + final List items = const [ + BottomNavigationBarItem( + icon: Icon(Icons.business_sharp), + label: '合作廠商', + ), + BottomNavigationBarItem( + icon: Icon(Icons.diversity_1_sharp), + label: '旗下管理師', + ), + BottomNavigationBarItem( + icon: Icon(Icons.add_shopping_cart_sharp), + label: '旗下產品', + ), + BottomNavigationBarItem( + icon: Icon(Icons.settings_sharp), + label: '設定', + ), + ]; + + @override + Widget build(BuildContext context) { + return CupertinoTabBar( + items: items, + onTap: onTap, + border: null, + iconSize: 24.sp, + currentIndex: currentIndex, + backgroundColor: context.surface.withOpacity(0.75), + activeColor: context.inverseSurface.withOpacity(0.75), + ); + } +} diff --git a/lib/Component/BottomNavigationBar/lamiter_bottom_navigation_bar.dart b/lib/Component/BottomNavigationBar/lamiter_bottom_navigation_bar.dart new file mode 100644 index 0000000..d3196c3 --- /dev/null +++ b/lib/Component/BottomNavigationBar/lamiter_bottom_navigation_bar.dart @@ -0,0 +1,39 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class LamiterBottomNavigationBar extends StatelessWidget { + final int currentIndex; + final Function(int)? onTap; + + const LamiterBottomNavigationBar({ + super.key, + required this.currentIndex, + this.onTap, + }); + + final List items = const [ + BottomNavigationBarItem( + icon: Icon(Icons.business_sharp), + label: '合作廠商', + ), + BottomNavigationBarItem( + icon: Icon(Icons.settings), + label: '設定', + ), + ]; + + @override + Widget build(BuildContext context) { + return CupertinoTabBar( + items: items, + onTap: onTap, + border: null, + iconSize: 24.sp, + currentIndex: currentIndex, + backgroundColor: context.surface.withOpacity(0.75), + activeColor: context.inverseSurface.withOpacity(0.75), + ); + } +} diff --git a/lib/Component/BottomNavigationBar/manager_bottom_navigation_bar.dart b/lib/Component/BottomNavigationBar/manager_bottom_navigation_bar.dart new file mode 100644 index 0000000..c12e235 --- /dev/null +++ b/lib/Component/BottomNavigationBar/manager_bottom_navigation_bar.dart @@ -0,0 +1,52 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ManagerBottomNavigationBar extends StatelessWidget { + final int currentIndex; + final Function(int)? onTap; + + const ManagerBottomNavigationBar({ + super.key, + required this.currentIndex, + this.onTap, + }); + + @override + Widget build(BuildContext context) { + final List items = [ + BottomNavigationBarItem( + icon: const Icon(Icons.home_filled), + label: AppLocalizations.of(context).home, + ), + BottomNavigationBarItem( + icon: const Icon(CupertinoIcons.book_fill), + label: AppLocalizations.of(context).learning_resource, + ), + BottomNavigationBarItem( + icon: const Icon(Icons.add_circle_rounded), + label: AppLocalizations.of(context).diagnosis_and_solution, + ), + BottomNavigationBarItem( + icon: const Icon(CupertinoIcons.cart_fill), + label: AppLocalizations.of(context).mall, + ), + BottomNavigationBarItem( + icon: const Icon(CupertinoIcons.profile_circled), + label: AppLocalizations.of(context).profile, + ), + ]; + + return CupertinoTabBar( + items: items, + onTap: onTap, + border: null, + iconSize: 24.sp, + currentIndex: currentIndex, + backgroundColor: context.surface.withOpacity(0.75), + activeColor: context.inverseSurface.withOpacity(0.75), + ); + } +} diff --git a/lib/Component/Button/my_text_button.dart b/lib/Component/Button/my_text_button.dart new file mode 100644 index 0000000..2eb2567 --- /dev/null +++ b/lib/Component/Button/my_text_button.dart @@ -0,0 +1,101 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class MyTextButton extends StatelessWidget { + final double width; + final double height; + final Widget? prefixIcon; + final String text; + final double fontSize; + final bool enabled; + final Function()? onTap; + final Color? backgroundColor; + final Color? fontColor; + + const MyTextButton({ + super.key, + required this.width, + required this.height, + this.prefixIcon, + required this.text, + required this.fontSize, + required this.enabled, + this.onTap, + this.backgroundColor, + this.fontColor, + }); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: enabled ? onTap : null, + child: Container( + width: width, + height: height, + decoration: BoxDecoration( + color: enabled + ? backgroundColor ?? context.inverseSurface + : backgroundColor != null + ? backgroundColor!.withOpacity(0.25) + : context.primary, + borderRadius: BorderRadius.circular(32.sp), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + padding: + EdgeInsets.only(right: prefixIcon != null ? 12.sp : 0.sp), + child: prefixIcon, + ), + Text( + text, + style: context.lM!.copyWith( + fontSize: fontSize, + fontWeight: FontWeight.w900, + letterSpacing: 2.sp, + color: fontColor != null + ? fontColor!.withOpacity(enabled ? 1 : 0.5) + : context.surface.withOpacity(enabled ? 1 : 0.5), + ), + ), + ], + ), + ), + ); + } +} + +// class ValidatingButton extends StatelessWidget { +// final double width; +// final double height; +// final double borderRadius; + +// const ValidatingButton({ +// super.key, +// required this.width, +// required this.height, +// required this.borderRadius, +// }); + +// @override +// Widget build(BuildContext context) { +// return Align( +// child: Container( +// width: width, +// height: height, +// decoration: BoxDecoration( +// color: context.inverseSurface, +// borderRadius: BorderRadius.circular(borderRadius), +// ), +// child: Align( +// alignment: Alignment.center, +// child: CupertinoActivityIndicator( +// color: context.surface, +// ), +// ), +// ), +// ); +// } +// } diff --git a/lib/Component/Button/submit_button.dart b/lib/Component/Button/submit_button.dart new file mode 100644 index 0000000..b1d3be1 --- /dev/null +++ b/lib/Component/Button/submit_button.dart @@ -0,0 +1,86 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/Button/my_text_button.dart'; +import 'package:lamiter/Component/bottom_popup_message.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class SubmitButton extends StatefulWidget { + final String text; + final bool enabled; + final bool submitting; + final Function()? onTap; + + const SubmitButton({ + super.key, + required this.text, + this.enabled = true, + this.submitting = false, + this.onTap, + }); + + @override + State createState() => SubmitButtonState(); +} + +class SubmitButtonState extends State { + final GlobalKey errorMessageKey = + GlobalKey(); + + void showMessage(String message, Color color) { + errorMessageKey.currentState?.showMessage(message, color); + } + + @override + Widget build(BuildContext context) { + final width = context.width(0.4); + final height = 36.sp; + + return SizedBox( + width: context.width(1), + height: context.height(0.2), + child: Stack( + alignment: Alignment.bottomCenter, + children: [ + // Error message + BottomPopupMessage( + key: errorMessageKey, + height: context.height(0.1) + 12.sp, + ), + // Button + Container( + width: context.width(1), + height: context.height(0.1), + decoration: BoxDecoration( + color: context.surface, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + spreadRadius: 5, + blurRadius: 7, + offset: const Offset(0, 3), // changes position of shadow + ), + ], + ), + child: Center( + child: Padding( + padding: EdgeInsets.only(bottom: 6.sp), + child: MyTextButton( + width: width, + height: height, + prefixIcon: widget.submitting + ? CupertinoActivityIndicator(color: context.surface) + : null, + text: widget.text, + fontSize: 13.sp, + enabled: !widget.submitting && widget.enabled, + onTap: widget.onTap, + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/Component/Button/top_bar_filled_button.dart b/lib/Component/Button/top_bar_filled_button.dart new file mode 100644 index 0000000..fa1ec79 --- /dev/null +++ b/lib/Component/Button/top_bar_filled_button.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class TopBarFilledButton extends StatelessWidget { + final IconData iconData; + final Function()? onPressed; + + const TopBarFilledButton({ + super.key, + required this.iconData, + this.onPressed, + }); + + @override + Widget build(BuildContext context) { + return FilledButton( + style: FilledButton.styleFrom( + backgroundColor: context.inverseSurface, + ), + onPressed: onPressed, + child: Icon(iconData, size: 18.sp), + ); + } +} diff --git a/lib/Component/Button/top_bar_text_button.dart b/lib/Component/Button/top_bar_text_button.dart new file mode 100644 index 0000000..8bc23e8 --- /dev/null +++ b/lib/Component/Button/top_bar_text_button.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class TopBarTextButton extends StatelessWidget { + final String text; + final Function()? onPressed; + + const TopBarTextButton({ + super.key, + required this.text, + this.onPressed, + }); + + @override + Widget build(BuildContext context) { + return FilledButton( + style: FilledButton.styleFrom( + backgroundColor: context.inverseSurface, + ), + onPressed: onPressed, + child: Text( + text, + style: context.tS!.copyWith( + color: context.surface, + fontWeight: FontWeight.bold, + ), + ), + ); + } +} diff --git a/lib/Component/CupertinoForm/cupertino_form_row.dart b/lib/Component/CupertinoForm/cupertino_form_row.dart new file mode 100644 index 0000000..7f37955 --- /dev/null +++ b/lib/Component/CupertinoForm/cupertino_form_row.dart @@ -0,0 +1,58 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/tap_container.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class MyCupertinoFormRow extends StatelessWidget { + final String title; + final Function()? onTap; + final bool completed; + final Widget? customWidget; + final Widget? customCompletedWidget; + + const MyCupertinoFormRow({ + required this.title, + this.onTap, + this.completed = false, + this.customWidget, + this.customCompletedWidget, + }); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + children: [ + TapContainer( + onTap: onTap, + child: CupertinoFormRow( + padding: EdgeInsets.all(16.sp), + prefix: Text( + title, + style: TextStyle( + fontFamily: 'CupertinoSystemText', + inherit: false, + fontSize: 17.0, + fontWeight: FontWeight.w400, + textBaseline: TextBaseline.alphabetic, + color: context.inversePrimary, + ), + ), + child: completed + ? customCompletedWidget ?? + Icon( + CupertinoIcons.checkmark_alt_circle_fill, + color: context.inversePrimary, + ) + : customWidget ?? + Icon( + CupertinoIcons.forward, + color: context.primary, + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/Component/CupertinoForm/cupertino_form_section.dart b/lib/Component/CupertinoForm/cupertino_form_section.dart new file mode 100644 index 0000000..66dd39e --- /dev/null +++ b/lib/Component/CupertinoForm/cupertino_form_section.dart @@ -0,0 +1,32 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_row.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class MyCupertinoFormSection extends StatelessWidget { + final String title; + final List items; + final String? note; + + const MyCupertinoFormSection({ + super.key, + required this.title, + required this.items, + this.note, + }); + + @override + Widget build(BuildContext context) { + return CupertinoFormSection( + backgroundColor: context.surface, + header: Text(title), + footer: note != null + ? Padding( + padding: EdgeInsets.only(top: 12.sp), + child: Text(note!, textAlign: TextAlign.justify), + ) + : null, + children: items, + ); + } +} diff --git a/lib/Component/Diagnosis/Report/basic_health_report_page.dart b/lib/Component/Diagnosis/Report/basic_health_report_page.dart new file mode 100644 index 0000000..19c3b54 --- /dev/null +++ b/lib/Component/Diagnosis/Report/basic_health_report_page.dart @@ -0,0 +1,80 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Result/health_index_result.dart'; +import 'package:lamiter/Class/Result/physical_index_result.dart'; +import 'package:lamiter/Class/Result/sleep_well_index_result.dart'; +import 'package:lamiter/Class/Result/stress_index_result.dart'; +import 'package:lamiter/Class/Result/urban_disease_result.dart'; +import 'package:lamiter/Component/Diagnosis/Result/health_index_result_page.dart'; +import 'package:lamiter/Component/Diagnosis/Result/physical_index_result_page.dart'; +import 'package:lamiter/Component/Diagnosis/Result/sleep_well_index_result_page.dart'; +import 'package:lamiter/Component/Diagnosis/Result/stress_index_result_page.dart'; +import 'package:lamiter/Component/Diagnosis/Result/urban_disease_result_page.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class BasicHealthReportPage extends StatelessWidget { + final HealthIndexResult? healthIndexResult; + final PhysicalIndexResult? physicalIndexResult; + final UrbanDiseaseResult? urbanDiseaseResult; + final StressIndexResult? stressIndexResult; + final SleepWellIndexResult? sleepWellIndexResult; + + const BasicHealthReportPage({ + super.key, + required this.healthIndexResult, + required this.physicalIndexResult, + required this.urbanDiseaseResult, + required this.stressIndexResult, + required this.sleepWellIndexResult, + }); + + @override + Widget build(BuildContext context) { + List children = []; + + if (healthIndexResult != null) { + children.add(HealthIndexResultPage(healthIndexResult: healthIndexResult)); + } + if (physicalIndexResult != null) { + children.add( + PhysicalIndexResultPage(physicalIndexResult: physicalIndexResult)); + } + if (urbanDiseaseResult != null) { + children + .add(UrbanDiseaseResultPage(urbanDiseaseResult: urbanDiseaseResult)); + } + if (stressIndexResult != null) { + children.add(StressIndexResultPage(stressIndexResult: stressIndexResult)); + } + if (sleepWellIndexResult != null) { + children.add( + SleepWellIndexResultPage(sleepWellIndexResult: sleepWellIndexResult)); + } + + if (children.isEmpty) { + children.add(_EmptyReportPage()); + } + + return Column(children: children); + } +} + +class _EmptyReportPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(vertical: 16.sp), + child: Center( + child: Text( + AppLocalizations.of(context).no_related_diagnosis, + style: context.tM!.copyWith( + color: context.primary, + fontWeight: FontWeight.bold, + letterSpacing: 1.sp, + ), + ), + ), + ); + } +} diff --git a/lib/Component/Diagnosis/Report/constitution_report_page.dart b/lib/Component/Diagnosis/Report/constitution_report_page.dart new file mode 100644 index 0000000..b102d6c --- /dev/null +++ b/lib/Component/Diagnosis/Report/constitution_report_page.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Result/constitution_result.dart'; +import 'package:lamiter/Component/Diagnosis/Result/constitution_result_page.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ConstitutionReportPage extends StatelessWidget { + final ConstitutionResult? constitutionResult; + + const ConstitutionReportPage({super.key, required this.constitutionResult}); + + @override + Widget build(BuildContext context) { + List children = []; + + if (constitutionResult != null) { + children + .add(ConstitutionResultPage(constitutionResult: constitutionResult)); + } else { + children.add(_EmptyReportPage()); + } + + return Column(children: children); + } +} + +class _EmptyReportPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(vertical: 16.sp), + child: Center( + child: Text( + AppLocalizations.of(context).no_related_diagnosis, + style: context.tM!.copyWith( + color: context.primary, + fontWeight: FontWeight.bold, + letterSpacing: 1.sp, + ), + ), + ), + ); + } +} diff --git a/lib/Component/Diagnosis/Report/posture_issue_report_page.dart b/lib/Component/Diagnosis/Report/posture_issue_report_page.dart new file mode 100644 index 0000000..3641fa6 --- /dev/null +++ b/lib/Component/Diagnosis/Report/posture_issue_report_page.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Component/Diagnosis/Result/muscles_result_page.dart'; +import 'package:lamiter/Component/Diagnosis/Result/posture_issue_result_page.dart'; +import 'package:lamiter/Component/Diagnosis/Result/zong_fu_meridians_result_page.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class PostureIssueReportPage extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const PostureIssueReportPage({super.key, required this.postureIssueResult}); + + @override + Widget build(BuildContext context) { + List children = []; + + if (postureIssueResult != null) { + children + .add(PostureIssueResultPage(postureIssueResult: postureIssueResult)); + children.add(MusclesResultPage(postureIssueResult: postureIssueResult)); + children.add( + ZongFuMeridiansResultPage(postureIssueResult: postureIssueResult)); + } else { + children.add(_EmptyReportPage()); + } + + return Column(children: children); + } +} + +class _EmptyReportPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(vertical: 16.sp), + child: Center( + child: Text( + AppLocalizations.of(context).no_related_diagnosis, + style: context.tM!.copyWith( + color: context.primary, + fontWeight: FontWeight.bold, + letterSpacing: 1.sp, + ), + ), + ), + ); + } +} diff --git a/lib/Component/Diagnosis/Result/constitution_result_page.dart b/lib/Component/Diagnosis/Result/constitution_result_page.dart new file mode 100644 index 0000000..7c3fd5e --- /dev/null +++ b/lib/Component/Diagnosis/Result/constitution_result_page.dart @@ -0,0 +1,177 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Result/constitution_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_column.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_multi_tag_display.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_score_bar_display.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_status_bar_diaplay.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_tag_display.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_text_display.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class ConstitutionResultPage extends StatelessWidget { + final ConstitutionResult? constitutionResult; + + const ConstitutionResultPage({ + super.key, + required this.constitutionResult, + }); + @override + Widget build(BuildContext context) { + return Column(children: [ + DiagnosisResultContainer( + child: _BalancedConstitutionLayout( + constitutionResult: constitutionResult ?? ConstitutionResult(), + ), + ), + DiagnosisResultContainer( + child: _ConstitutionsLayout( + constitutionResult: constitutionResult ?? ConstitutionResult(), + ), + ), + ]); + } +} + +class _BalancedConstitutionLayout extends StatelessWidget { + final ConstitutionResult constitutionResult; + + const _BalancedConstitutionLayout({ + required this.constitutionResult, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return DiagnosisColumn( + children: [ + // const DiagnosisResultTitle(title: '體質平衡'), + DiagnosisTextDisplay( + title: AppLocalizations.of(context).balanced_index, + text: '${constitutionResult.balanced_constitution_score}%', + backgroundColor: constitutionResult.balanced_color(), + ), + DiagnosisStatusBarDiaplay( + length: constitutionResult.status_length, + flexs: constitutionResult.balanced_status_thresh, + colors: constitutionResult.balanced_status_colors, + texts: constitutionResult.balanced_status_labels + .map((label) => languageProvider.getLocaleString(label)) + .toList(), + indicatorFactor: constitutionResult.balanced_factor(), + ), + ], + ); + } +} + +class _ConstitutionsLayout extends StatelessWidget { + final ConstitutionResult? constitutionResult; + + const _ConstitutionsLayout({ + required this.constitutionResult, + }); + + @override + Widget build(BuildContext context) { + return DiagnosisColumn( + children: [ + _MainAndSubConstitutionsLayout(constitutionResult: constitutionResult), + _ConstitutionsListLayout(constitutionResult: constitutionResult) + ].separator(SizedBox(height: 6.sp)).toList(), + ); + } +} + +class _MainAndSubConstitutionsLayout extends StatelessWidget { + final ConstitutionResult? constitutionResult; + + const _MainAndSubConstitutionsLayout({ + required this.constitutionResult, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + List children = []; + final mainConstitutions = constitutionResult + ?.main_constitutions(context) + .map((constitution) => constitution.name) + .toList() ?? + []; + if (mainConstitutions.isNotEmpty) { + children.add( + DiagnosisMultiTagDisplay( + title: AppLocalizations.of(context).main_constitution, + tags: mainConstitutions.map( + (mainConstitution) { + return DiagnosisTagDisplay( + backgroundColor: + constitutionResult!.constitution_status_colors[2], + tag: languageProvider.getLocaleString(mainConstitution), + ); + }, + ).toList(), + ), + ); + } + final subConstitutions = constitutionResult + ?.sub_constitutions(context) + .map((constitution) => constitution.name) + .toList() ?? + []; + if (subConstitutions.isNotEmpty) { + children.add( + DiagnosisMultiTagDisplay( + title: AppLocalizations.of(context).sub_constitution, + tags: subConstitutions.map( + (subConstitution) { + return DiagnosisTagDisplay( + backgroundColor: + constitutionResult!.constitution_status_colors[1], + tag: languageProvider.getLocaleString(subConstitution), + ); + }, + ).toList(), + ), + ); + } + + return DiagnosisColumn( + children: children.separator(SizedBox(height: 6.sp)).toList(), + ); + } +} + +class _ConstitutionsListLayout extends StatelessWidget { + final ConstitutionResult? constitutionResult; + + const _ConstitutionsListLayout({ + required this.constitutionResult, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return DiagnosisColumn( + children: (constitutionResult?.report_display_constitutions(context) ?? + []) + .map( + (constitution) => DiagnosisScoreBarDisplay( + title: languageProvider.getLocaleString(constitution.name), + score: constitutionResult?.constitution_score(constitution) ?? 0, + barColor: constitutionResult?.constitution_color(constitution) ?? + Colors.grey, + ), + ) + .toList(), + ); + } +} diff --git a/lib/Component/Diagnosis/Result/health_index_result_page.dart b/lib/Component/Diagnosis/Result/health_index_result_page.dart new file mode 100644 index 0000000..6def070 --- /dev/null +++ b/lib/Component/Diagnosis/Result/health_index_result_page.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Result/health_index_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_column.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_status_bar_diaplay.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_text_display.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class HealthIndexResultPage extends StatelessWidget { + final HealthIndexResult? healthIndexResult; + + const HealthIndexResultPage({ + super.key, + required this.healthIndexResult, + }); + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _HealthIndexLayout( + healthIndexResult: healthIndexResult ?? HealthIndexResult(score: 0), + ), + ), + ], + ); + } +} + +class _HealthIndexLayout extends StatelessWidget { + final HealthIndexResult healthIndexResult; + + const _HealthIndexLayout({ + required this.healthIndexResult, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return DiagnosisColumn( + children: [ + DiagnosisTextDisplay( + title: AppLocalizations.of(context).health_index, + text: '${(healthIndexResult.factor() * 100).round()}%', + backgroundColor: healthIndexResult.color(), + ), + DiagnosisStatusBarDiaplay( + length: healthIndexResult.status_length, + flexs: healthIndexResult.status_thresh, + colors: healthIndexResult.status_colors, + texts: healthIndexResult.status_labels + .map((label) => languageProvider.getLocaleString(label)) + .toList(), + indicatorFactor: healthIndexResult.factor(), + ), + ], + ); + } +} diff --git a/lib/Component/Diagnosis/Result/muscles_result_page.dart b/lib/Component/Diagnosis/Result/muscles_result_page.dart new file mode 100644 index 0000000..4164070 --- /dev/null +++ b/lib/Component/Diagnosis/Result/muscles_result_page.dart @@ -0,0 +1,149 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_focus_dot_bar_display.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/image_stacker.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class MusclesResultPage extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const MusclesResultPage({ + super.key, + required this.postureIssueResult, + }); + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _MusclesListLayout( + postureIssueResult: postureIssueResult ?? PostureIssueResult(), + ), + ), + ], + ); + } +} + +class _MusclesListLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const _MusclesListLayout({ + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + _MusclesUnitLayout( + postureIssueResult: postureIssueResult, + muscles: postureIssueResult?.front_muscles ?? [], + notes: postureIssueResult?.front_muscles_note ?? [], + title: AppLocalizations.of(context).muscle_front_view, + path: 'assets/muscles/front', + ), + _MusclesUnitLayout( + postureIssueResult: postureIssueResult, + muscles: postureIssueResult?.side_muscles ?? [], + notes: postureIssueResult?.side_muscles_note ?? [], + title: AppLocalizations.of(context).muscle_side_view, + path: 'assets/muscles/side_right', + ), + _MusclesUnitLayout( + postureIssueResult: postureIssueResult, + muscles: postureIssueResult?.back_muscles ?? [], + notes: postureIssueResult?.back_muscles_note ?? [], + title: AppLocalizations.of(context).muscle_back_view, + path: 'assets/muscles/back', + ), + ] + .separator( + Padding( + padding: EdgeInsets.symmetric(vertical: 6.sp), + child: Divider( + color: context.primary.withOpacity(0.25), + thickness: 0.5, + ), + ), + ) + .toList(), + ); + } +} + +class _MusclesUnitLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + final String title; + final String path; + final List muscles; + final List notes; + + const _MusclesUnitLayout({ + required this.postureIssueResult, + required this.muscles, + required this.notes, + required this.title, + required this.path, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Center( + child: Column( + children: [ + Stack( + children: [ + Container( + alignment: Alignment.center, + child: Text( + languageProvider.getLocaleString(title), + style: context.diagnosisResultDisplayTitleTextStyle, + ), + ), + Stack( + alignment: Alignment.bottomCenter, + children: [ + ImageStacker( + assetPath: path, + assetImages: muscles, + height: 500.sp, + ), + DiagnosisFocusDotBarDisplay( + length: postureIssueResult?.muscles_status_length ?? 0, + titles: postureIssueResult?.muscles_status_labels + .map((label) => + languageProvider.getLocaleString(label)) + .toList() ?? + [], + colors: postureIssueResult?.muscles_status_colors ?? [], + ), + ], + ), + ], + ), + Column( + children: notes + .map( + (note) => Text( + languageProvider.getLocaleString('($note)'), + style: context.lL!.copyWith(fontWeight: FontWeight.normal), + textAlign: TextAlign.center, + ), + ) + .separator(SizedBox(height: 6.sp)) + .toList(), + ), + ].separator(SizedBox(height: 12.sp)).toList(), + ), + ); + } +} diff --git a/lib/Component/Diagnosis/Result/physical_index_result_page.dart b/lib/Component/Diagnosis/Result/physical_index_result_page.dart new file mode 100644 index 0000000..1934e69 --- /dev/null +++ b/lib/Component/Diagnosis/Result/physical_index_result_page.dart @@ -0,0 +1,88 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Result/physical_index_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_column.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_status_bar_diaplay.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_text_display.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class PhysicalIndexResultPage extends StatelessWidget { + final PhysicalIndexResult? physicalIndexResult; + + const PhysicalIndexResultPage({ + super.key, + required this.physicalIndexResult, + }); + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _PhysicalIndexBMILayout( + physicalIndexResult: + physicalIndexResult ?? PhysicalIndexResult(BMI: 0, BMR: 0), + ), + ), + DiagnosisResultContainer( + child: _PhysicalIndexBMRLayout( + physicalIndexResult: + physicalIndexResult ?? PhysicalIndexResult(BMI: 0, BMR: 0), + ), + ), + ], + ); + } +} + +class _PhysicalIndexBMILayout extends StatelessWidget { + final PhysicalIndexResult physicalIndexResult; + + const _PhysicalIndexBMILayout({ + required this.physicalIndexResult, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return DiagnosisColumn( + children: [ + DiagnosisTextDisplay( + title: AppLocalizations.of(context).bmi_index, + text: physicalIndexResult.BMI.toStringAsFixed(1), + backgroundColor: physicalIndexResult.BMI_color(), + ), + DiagnosisStatusBarDiaplay( + length: physicalIndexResult.BMI_status_length, + flexs: physicalIndexResult.BMI_status_thresh, + colors: physicalIndexResult.BMI_status_colors, + texts: physicalIndexResult.BMI_status_labels.map( + (label) => languageProvider.getLocaleString(label)).toList(), + indicatorFactor: physicalIndexResult.BMI_factor(), + ), + ], + ); + } +} + +class _PhysicalIndexBMRLayout extends StatelessWidget { + final PhysicalIndexResult physicalIndexResult; + + const _PhysicalIndexBMRLayout({required this.physicalIndexResult}); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + // const DiagnosisResultTitle(title: '體質平衡'), + DiagnosisTextDisplay( + title: AppLocalizations.of(context).bmr_index, + text: physicalIndexResult.BMR.toStringAsFixed(1), + backgroundColor: Colors.amber, + ), + ], + ); + } +} diff --git a/lib/Component/Diagnosis/Result/posture_issue_result_page.dart b/lib/Component/Diagnosis/Result/posture_issue_result_page.dart new file mode 100644 index 0000000..fb5b9f8 --- /dev/null +++ b/lib/Component/Diagnosis/Result/posture_issue_result_page.dart @@ -0,0 +1,266 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/symptom.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_column.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_score_bar_display.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_tag_display.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class PostureIssueResultPage extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const PostureIssueResultPage({ + super.key, + required this.postureIssueResult, + }); + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _PostureIssuesLayout( + postureIssueResult: postureIssueResult ?? PostureIssueResult(), + ), + ), + ], + ); + } +} + +class _PostureIssuesLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const _PostureIssuesLayout({ + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + _PostureIssuesListLayout(postureIssueResult: postureIssueResult) + ].separator(SizedBox(height: 6.sp)).toList(), + ); + } +} + +class _PostureIssuesListLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const _PostureIssuesListLayout({ + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + return Column( + children: (postureIssueResult?.report_display_posture_issues(context) ?? + []) + .map( + (postureIssue) => _PostureIssuesUnitLayout( + title: postureIssue.name, + imageContainer: postureIssueResult?.posture_issue_image_widget( + postureIssue, 200.sp) ?? + const SizedBox.shrink(), + score: postureIssueResult?.posture_issue_score(postureIssue) ?? 0, + barColor: postureIssueResult?.posture_issue_color(postureIssue) ?? + Colors.grey, + label: + postureIssueResult?.posture_issue_label(postureIssue) ?? '', + angleNote: + postureIssueResult?.posture_issue_angle_note(postureIssue) ?? + '', + symptoms: postureIssueResult?.posture_issue_symptoms( + context, postureIssue) ?? + [], + ), + ) + .separator( + Padding( + padding: EdgeInsets.symmetric(vertical: 6.sp), + child: Divider( + color: context.primary.withOpacity(0.25), + thickness: 0.5, + ), + ), + ) + .toList(), + ); + } +} + +class _PostureIssuesUnitLayout extends StatelessWidget { + final String title; + final Widget imageContainer; + final int score; + final Color barColor; + final String label; + final String angleNote; + final List symptoms; + + const _PostureIssuesUnitLayout({ + required this.title, + required this.imageContainer, + required this.score, + required this.barColor, + required this.label, + required this.angleNote, + required this.symptoms, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return DiagnosisColumn( + children: [ + Container( + alignment: Alignment.centerLeft, + padding: EdgeInsets.only(bottom: 6.sp), + child: Text( + languageProvider.getLocaleString(title), + style: context.diagnosisResultDisplayTitleTextStyle, + ), + ), + Column( + children: [ + imageContainer, + Text( + languageProvider.getLocaleString(angleNote), + textAlign: TextAlign.justify, + style: context.lS!.copyWith( + color: context.inverseSurface, + fontWeight: FontWeight.bold, + ), + ), + ].separator(SizedBox(height: 6.sp)).toList(), + ), + DiagnosisScoreBarDisplay( + title: languageProvider.getLocaleString(label), + score: score, + barColor: barColor, + ), + Padding( + padding: EdgeInsets.only(top: 3.sp), + child: Column( + children: [ + _ExpandableLayout( + titleWidget: DiagnosisTagDisplay( + backgroundColor: context.error, + tag: AppLocalizations.of(context).potential_risk_disease, + onTap: () {}, + ), + contentWidget: Padding( + padding: EdgeInsets.only(top: 6.sp), + child: Column( + children: symptoms + .map( + (symptom) { + return Container( + alignment: Alignment.centerLeft, + child: _ExpandableLayout( + titleWidget: Row( + children: [ + Padding( + padding: EdgeInsets.only(right: 6.sp), + child: Icon(Icons.circle, size: 9.sp), + ), + SelectableText( + languageProvider + .getLocaleString(symptom.name), + style: context + .diagnosisResultDisplayTitleTextStyle, + ), + ], + ), + contentWidget: Padding( + padding: EdgeInsets.only(top: 0.sp), + child: Row( + children: [ + Flexible( + child: SelectableText( + languageProvider.getLocaleString( + symptom.description), + style: context.lL, + textAlign: TextAlign.justify, + ), + ), + ], + ), + ), + ), + ); + }, + ) + .separator(SizedBox(height: 9.sp)) + .toList(), + ), + ), + ), + ], + ), + ), + ], + ); + } +} + +class _ExpandableLayout extends StatefulWidget { + final Widget titleWidget; + final Widget contentWidget; + final bool initToggle; + + const _ExpandableLayout({ + required this.titleWidget, + required this.contentWidget, + this.initToggle = false, + }); + + @override + State<_ExpandableLayout> createState() => _ExpandableLayoutState(); +} + +class _ExpandableLayoutState extends State<_ExpandableLayout> + with AutomaticKeepAliveClientMixin { + late bool _toggle; + + @override + void initState() { + super.initState(); + _toggle = widget.initToggle; + } + + @override + Widget build(BuildContext context) { + super.build(context); + return Column( + children: [ + Row( + children: [ + widget.titleWidget, + GestureDetector( + onTap: () { + _toggle = !_toggle; + setState(() {}); + }, + child: Icon( + _toggle ? Icons.arrow_drop_down : Icons.arrow_drop_up, + size: 18.sp, + ), + ), + ], + ), + _toggle ? widget.contentWidget : const SizedBox.shrink(), + ], + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/Component/Diagnosis/Result/sleep_well_index_result_page.dart b/lib/Component/Diagnosis/Result/sleep_well_index_result_page.dart new file mode 100644 index 0000000..d3cf4a7 --- /dev/null +++ b/lib/Component/Diagnosis/Result/sleep_well_index_result_page.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Result/sleep_well_index_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_column.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_status_bar_diaplay.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_text_display.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class SleepWellIndexResultPage extends StatelessWidget { + final SleepWellIndexResult? sleepWellIndexResult; + + const SleepWellIndexResultPage({ + super.key, + required this.sleepWellIndexResult, + }); + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _SleepWellIndexLayout( + sleepWellIndexResult: + sleepWellIndexResult ?? SleepWellIndexResult(score: 0), + ), + ), + ], + ); + } +} + +class _SleepWellIndexLayout extends StatelessWidget { + final SleepWellIndexResult sleepWellIndexResult; + + const _SleepWellIndexLayout({ + required this.sleepWellIndexResult, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return DiagnosisColumn( + children: [ + DiagnosisTextDisplay( + title: AppLocalizations.of(context).sleep_well_index, + text: '${(sleepWellIndexResult.factor() * 100).round()}%', + backgroundColor: sleepWellIndexResult.color(), + ), + DiagnosisStatusBarDiaplay( + length: sleepWellIndexResult.status_length, + flexs: sleepWellIndexResult.status_thresh, + colors: sleepWellIndexResult.status_colors, + texts: sleepWellIndexResult.status_labels + .map((label) => languageProvider.getLocaleString(label)) + .toList(), + indicatorFactor: sleepWellIndexResult.factor(), + ), + ], + ); + } +} diff --git a/lib/Component/Diagnosis/Result/stress_index_result_page.dart b/lib/Component/Diagnosis/Result/stress_index_result_page.dart new file mode 100644 index 0000000..f80efc5 --- /dev/null +++ b/lib/Component/Diagnosis/Result/stress_index_result_page.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Result/stress_index_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_column.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_status_bar_diaplay.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_text_display.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class StressIndexResultPage extends StatelessWidget { + final StressIndexResult? stressIndexResult; + + const StressIndexResultPage({ + super.key, + required this.stressIndexResult, + }); + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _StressIndexLayout( + stressIndexResult: stressIndexResult ?? StressIndexResult(score: 0), + ), + ), + ], + ); + } +} + +class _StressIndexLayout extends StatelessWidget { + final StressIndexResult stressIndexResult; + + const _StressIndexLayout({ + required this.stressIndexResult, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return DiagnosisColumn( + children: [ + DiagnosisTextDisplay( + title: AppLocalizations.of(context).stress_index, + text: '${(stressIndexResult.factor() * 100).round()}%', + backgroundColor: stressIndexResult.color(), + ), + DiagnosisStatusBarDiaplay( + length: stressIndexResult.status_length, + flexs: stressIndexResult.status_thresh, + colors: stressIndexResult.status_colors, + texts: stressIndexResult.status_labels + .map((label) => languageProvider.getLocaleString(label)) + .toList(), + indicatorFactor: stressIndexResult.factor(), + ), + Container( + padding: EdgeInsets.only(top: 9.sp), + child: Text( + languageProvider.getLocaleString(stressIndexResult.info()), + textAlign: TextAlign.justify, + style: context.lMM, + ), + ) + ], + ); + } +} diff --git a/lib/Component/Diagnosis/Result/urban_disease_result_page.dart b/lib/Component/Diagnosis/Result/urban_disease_result_page.dart new file mode 100644 index 0000000..7dc778f --- /dev/null +++ b/lib/Component/Diagnosis/Result/urban_disease_result_page.dart @@ -0,0 +1,81 @@ +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/Result/urban_disease_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_multi_tag_display.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_tag_display.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Page/Diagnosis/urban_disease_details_page.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/urban_disease_provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class UrbanDiseaseResultPage extends StatelessWidget { + final UrbanDiseaseResult? urbanDiseaseResult; + + const UrbanDiseaseResultPage({ + super.key, + required this.urbanDiseaseResult, + }); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _UrbanDiseaseLayout( + urbanDiseaseResult: + urbanDiseaseResult ?? UrbanDiseaseResult(diseaseIds: []), + ), + ), + ], + ); + } +} + +class _UrbanDiseaseLayout extends StatelessWidget { + final UrbanDiseaseResult urbanDiseaseResult; + + const _UrbanDiseaseLayout({ + required this.urbanDiseaseResult, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Column( + children: [ + DiagnosisMultiTagDisplay( + title: AppLocalizations.of(context).urban_disease_survey, + tags: (urbanDiseaseResult.diseaseIds.isNotEmpty) + ? urbanDiseaseResult.diseaseIds.map( + (id) { + final disease = + context.read().findWithId(id); + return DiagnosisTagDisplay( + backgroundColor: context.error, + tag: + languageProvider.getLocaleString(disease?.name ?? ''), + onTap: () => Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + UrbanDiseaseDetailsPage(disease: disease), + ), + ), + ); + }, + ).toList() + : [ + DiagnosisTagDisplay( + backgroundColor: context.inverseSurface, + tag: AppLocalizations.of(context).no_urban_disease, + onTap: () {}, + ) + ], + ), + ], + ); + } +} diff --git a/lib/Component/Diagnosis/Result/zong_fu_meridians_result_page.dart b/lib/Component/Diagnosis/Result/zong_fu_meridians_result_page.dart new file mode 100644 index 0000000..3b2f0da --- /dev/null +++ b/lib/Component/Diagnosis/Result/zong_fu_meridians_result_page.dart @@ -0,0 +1,108 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/image_stacker.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ZongFuMeridiansResultPage extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const ZongFuMeridiansResultPage({ + super.key, + required this.postureIssueResult, + }); + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _ZongFuOrgansLayout( + postureIssueResult: postureIssueResult ?? PostureIssueResult(), + ), + ), + DiagnosisResultContainer( + child: _MeridiansLayout( + postureIssueResult: postureIssueResult ?? PostureIssueResult(), + ), + ), + ], + ); + } +} + +class _ZongFuOrgansLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const _ZongFuOrgansLayout({ + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + final List zongFuOrgansAssetImags = + postureIssueResult?.zang_fu_organs ?? []; + + return Center( + child: Column( + children: [ + // const DiagnosisResultTitle(title: '受影響的臟腑'), + Container( + alignment: Alignment.center, + child: Text( + AppLocalizations.of(context).affected_zong_fu, + style: context.diagnosisResultDisplayTitleTextStyle, + ), + ), + ImageStacker( + assetPath: 'assets/zong_fu_organs', + assetImages: zongFuOrgansAssetImags, + height: 400.sp, //context.height(0.5), + ), + ].firstPadding(EdgeInsets.only(bottom: 16.sp)).toList(), + ), + ); + } +} + +class _MeridiansLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + const _MeridiansLayout({required this.postureIssueResult}); + + @override + Widget build(BuildContext context) { + final List meridiansAssetImags = + postureIssueResult?.meridians ?? []; + + return Column( + children: [ + Container( + alignment: Alignment.center, + child: Text( + AppLocalizations.of(context).affected_meridian, + style: context.diagnosisResultDisplayTitleTextStyle, + ), + ), + Wrap( + children: meridiansAssetImags + .map( + (image) => Container( + width: 320.sp, //context.width(0.4), + height: 320.sp, //context.width(0.4), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.sp), + image: DecorationImage( + image: AssetImage('assets/meridians/$image.png'), + fit: BoxFit.contain, + ), + ), + ), + ) + .toList(), + ), + ].separator(SizedBox(height: 12.sp)).toList(), + ); + } +} diff --git a/lib/Component/Diagnosis/Screenshot/posture_issue_result_double_display_page.dart b/lib/Component/Diagnosis/Screenshot/posture_issue_result_double_display_page.dart new file mode 100644 index 0000000..1eccb90 --- /dev/null +++ b/lib/Component/Diagnosis/Screenshot/posture_issue_result_double_display_page.dart @@ -0,0 +1,209 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/symptom.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_column.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_score_bar_display.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_tag_display.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class PostureIssueResultDoubleDisplayPage extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const PostureIssueResultDoubleDisplayPage({ + super.key, + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _PostureIssuesLayout( + postureIssueResult: postureIssueResult ?? PostureIssueResult(), + ), + ), + ], + ); + } +} + +class _PostureIssuesLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const _PostureIssuesLayout({ + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + _PostureIssuesListLayout(postureIssueResult: postureIssueResult) + ].separator(SizedBox(height: 6.sp)).toList(), + ); + } +} + +class _PostureIssuesListLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const _PostureIssuesListLayout({ + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + return Wrap( + spacing: 16, + runSpacing: 16, + children: (postureIssueResult + ?.screenshot_should_display_posture_issue(context) ?? + []) + .map( + (postureIssue) => _PostureIssuesUnitLayout( + title: postureIssue.name, + imageContainer: postureIssueResult?.posture_issue_image_widget( + postureIssue, 120) ?? + const SizedBox.shrink(), + score: postureIssueResult?.posture_issue_score(postureIssue) ?? 0, + barColor: postureIssueResult?.posture_issue_color(postureIssue) ?? + Colors.grey, + label: + postureIssueResult?.posture_issue_label(postureIssue) ?? '', + symptoms: postureIssueResult?.posture_issue_symptoms( + context, postureIssue) ?? + [], + ), + ) + .toList(), + ); + } +} + +class _PostureIssuesUnitLayout extends StatelessWidget { + final String title; + final Widget imageContainer; + final int score; + final Color barColor; + final String label; + + final List symptoms; + + const _PostureIssuesUnitLayout({ + required this.title, + required this.imageContainer, + required this.score, + required this.barColor, + required this.label, + required this.symptoms, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return SizedBox( + width: 240, + child: DiagnosisColumn( + children: [ + Container( + alignment: Alignment.centerLeft, + padding: EdgeInsets.only(bottom: 6.sp), + child: Text( + languageProvider.getLocaleString(title), + style: context.diagnosisResultDisplayTitleTextStyle, + ), + ), + imageContainer, + DiagnosisScoreBarDisplay( + title: languageProvider.getLocaleString(label), + score: score, + barColor: barColor, + ), + Padding( + padding: EdgeInsets.only(top: 3.sp), + child: Column( + children: [ + _FixedLayout( + titleWidget: DiagnosisTagDisplay( + backgroundColor: context.error, + tag: AppLocalizations.of(context).potential_risk_disease, + onTap: () {}, + ), + contentWidget: Padding( + padding: EdgeInsets.only(top: 6.sp), + child: Column( + children: symptoms + .map( + (symptom) { + return Container( + alignment: Alignment.centerLeft, + child: _FixedLayout( + titleWidget: Row( + children: [ + Padding( + padding: EdgeInsets.only(right: 6.sp), + child: Icon(Icons.circle, size: 9.sp), + ), + Text( + languageProvider + .getLocaleString(symptom.name), + style: context + .diagnosisResultDisplayTitleTextStyle, + ), + ], + ), + contentWidget: Padding( + padding: EdgeInsets.only(top: 0.sp), + child: Text( + languageProvider + .getLocaleString(symptom.description), + style: context.lL, + textAlign: TextAlign.justify, + ), + ), + ), + ); + }, + ) + .separator(SizedBox(height: 9.sp)) + .toList(), + ), + ), + ), + ], + ), + ), + ], + ), + ); + } +} + +class _FixedLayout extends StatelessWidget { + final Widget titleWidget; + final Widget contentWidget; + + const _FixedLayout({ + required this.titleWidget, + required this.contentWidget, + }); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + titleWidget, + contentWidget, + ], + ); + } +} diff --git a/lib/Component/Diagnosis/Screenshot/posture_issue_result_screenshot_page.dart b/lib/Component/Diagnosis/Screenshot/posture_issue_result_screenshot_page.dart new file mode 100644 index 0000000..cae3c33 --- /dev/null +++ b/lib/Component/Diagnosis/Screenshot/posture_issue_result_screenshot_page.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Component/Diagnosis/Screenshot/posture_issue_result_double_display_page.dart'; +import 'package:lamiter/Component/Diagnosis/Screenshot/posture_issue_result_single_display_page.dart'; + +class PostureIssueResultScreenshotPage extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const PostureIssueResultScreenshotPage({ + super.key, + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + return ((postureIssueResult + ?.screenshot_should_display_posture_issue(context) + .length ?? + 0) <= + 3) + ? PostureIssueResultSingleDisplayPage( + postureIssueResult: postureIssueResult) + : PostureIssueResultDoubleDisplayPage( + postureIssueResult: postureIssueResult); + } +} diff --git a/lib/Component/Diagnosis/Screenshot/posture_issue_result_single_display_page.dart b/lib/Component/Diagnosis/Screenshot/posture_issue_result_single_display_page.dart new file mode 100644 index 0000000..768b6df --- /dev/null +++ b/lib/Component/Diagnosis/Screenshot/posture_issue_result_single_display_page.dart @@ -0,0 +1,209 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/symptom.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_score_bar_display.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_tag_display.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class PostureIssueResultSingleDisplayPage extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const PostureIssueResultSingleDisplayPage({ + super.key, + required this.postureIssueResult, + }); + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _PostureIssuesLayout( + postureIssueResult: postureIssueResult ?? PostureIssueResult(), + ), + ), + ], + ); + } +} + +class _PostureIssuesLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const _PostureIssuesLayout({ + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + _PostureIssuesListLayout(postureIssueResult: postureIssueResult) + ].separator(SizedBox(height: 6.sp)).toList(), + ); + } +} + +class _PostureIssuesListLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const _PostureIssuesListLayout({ + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + return Column( + children: (postureIssueResult + ?.screenshot_should_display_posture_issue(context) ?? + []) + .map( + (postureIssue) => _PostureIssuesUnitLayout( + title: postureIssue.name, + imageContainer: postureIssueResult?.posture_issue_image_widget( + postureIssue, 200.sp) ?? + const SizedBox.shrink(), + score: postureIssueResult?.posture_issue_score(postureIssue) ?? 0, + barColor: postureIssueResult?.posture_issue_color(postureIssue) ?? + Colors.grey, + label: + postureIssueResult?.posture_issue_label(postureIssue) ?? '', + symptoms: postureIssueResult?.posture_issue_symptoms( + context, postureIssue) ?? + [], + ), + ) + .separator( + Padding( + padding: EdgeInsets.symmetric(vertical: 6.sp), + child: Divider( + color: context.primary.withOpacity(0.25), + thickness: 0.5, + ), + ), + ) + .toList(), + ); + } +} + +class _PostureIssuesUnitLayout extends StatelessWidget { + final String title; + final Widget imageContainer; + final int score; + final Color barColor; + final String label; + + final List symptoms; + + const _PostureIssuesUnitLayout({ + required this.title, + required this.imageContainer, + required this.score, + required this.barColor, + required this.label, + required this.symptoms, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Column(children: [ + Container( + alignment: Alignment.centerLeft, + padding: EdgeInsets.only(bottom: 6.sp), + child: Text( + languageProvider.getLocaleString(title), + style: context.diagnosisResultDisplayTitleTextStyle, + ), + ), + imageContainer, + DiagnosisScoreBarDisplay( + title: label, + score: score, + barColor: barColor, + ), + Padding( + padding: EdgeInsets.only(top: 3.sp), + child: Column( + children: [ + _FixedLayout( + titleWidget: DiagnosisTagDisplay( + backgroundColor: context.error, + tag: AppLocalizations.of(context).potential_risk_disease, + onTap: () {}, + ), + contentWidget: Padding( + padding: EdgeInsets.only(top: 6.sp), + child: Column( + children: symptoms + .map( + (symptom) { + return Container( + alignment: Alignment.centerLeft, + child: _FixedLayout( + titleWidget: Row( + children: [ + Padding( + padding: EdgeInsets.only(right: 6.sp), + child: Icon(Icons.circle, size: 9.sp), + ), + Text( + languageProvider + .getLocaleString(symptom.name), + style: context + .diagnosisResultDisplayTitleTextStyle, + ), + ], + ), + contentWidget: Padding( + padding: EdgeInsets.only(top: 0.sp), + child: Text( + languageProvider + .getLocaleString(symptom.description), + style: context.lL, + textAlign: TextAlign.justify, + ), + ), + ), + ); + }, + ) + .separator(SizedBox(height: 9.sp)) + .toList(), + ), + ), + ), + ], + ), + ), + ]); + } +} + +class _FixedLayout extends StatelessWidget { + final Widget titleWidget; + final Widget contentWidget; + + const _FixedLayout({ + required this.titleWidget, + required this.contentWidget, + }); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + titleWidget, + contentWidget, + ], + ); + } +} diff --git a/lib/Component/Diagnosis/Screenshot/zong_fu_meridians_result_screenshot_page.dart b/lib/Component/Diagnosis/Screenshot/zong_fu_meridians_result_screenshot_page.dart new file mode 100644 index 0000000..3766a65 --- /dev/null +++ b/lib/Component/Diagnosis/Screenshot/zong_fu_meridians_result_screenshot_page.dart @@ -0,0 +1,108 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_container.dart'; +import 'package:lamiter/Component/Diagnosis/image_stacker.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ZongFuMeridiansResultScreenshotPage extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const ZongFuMeridiansResultScreenshotPage({ + super.key, + required this.postureIssueResult, + }); + @override + Widget build(BuildContext context) { + return Column( + children: [ + DiagnosisResultContainer( + child: _ZongFuOrgansLayout( + postureIssueResult: postureIssueResult ?? PostureIssueResult(), + ), + ), + DiagnosisResultContainer( + child: _MeridiansLayout( + postureIssueResult: postureIssueResult ?? PostureIssueResult(), + ), + ), + ], + ); + } +} + +class _ZongFuOrgansLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + + const _ZongFuOrgansLayout({ + required this.postureIssueResult, + }); + + @override + Widget build(BuildContext context) { + final List zongFuOrgansAssetImags = + postureIssueResult?.zang_fu_organs ?? []; + + return Center( + child: Column( + children: [ + // const DiagnosisResultTitle(title: '受影響的臟腑'), + Container( + alignment: Alignment.center, + child: Text( + AppLocalizations.of(context).affected_zong_fu, + style: context.diagnosisResultDisplayTitleTextStyle, + ), + ), + ImageStacker( + assetPath: 'assets/zong_fu_organs', + assetImages: zongFuOrgansAssetImags, + height: 400.sp, //context.height(0.5), + ), + ].firstPadding(EdgeInsets.only(bottom: 16.sp)).toList(), + ), + ); + } +} + +class _MeridiansLayout extends StatelessWidget { + final PostureIssueResult? postureIssueResult; + const _MeridiansLayout({required this.postureIssueResult}); + + @override + Widget build(BuildContext context) { + final List meridiansAssetImags = + postureIssueResult?.meridians ?? []; + + return Column( + children: [ + Container( + alignment: Alignment.center, + child: Text( + AppLocalizations.of(context).affected_meridian, + style: context.diagnosisResultDisplayTitleTextStyle, + ), + ), + Wrap( + children: meridiansAssetImags + .map( + (image) => Container( + width: 120.sp, //context.width(0.4), + height: 120.sp, //context.width(0.4), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.sp), + image: DecorationImage( + image: AssetImage('assets/meridians/$image.png'), + fit: BoxFit.contain, + ), + ), + ), + ) + .toList(), + ), + ].separator(SizedBox(height: 12.sp)).toList(), + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_column.dart b/lib/Component/Diagnosis/diagnosis_column.dart new file mode 100644 index 0000000..45eb39f --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_column.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/iterable.dart'; + +class DiagnosisColumn extends StatelessWidget { + final List children; + + const DiagnosisColumn({super.key, this.children = const []}); + + @override + Widget build(BuildContext context) { + return Column( + children: children.separator(SizedBox(height: 6.sp)).toList(), + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_focus_dot_bar_display.dart b/lib/Component/Diagnosis/diagnosis_focus_dot_bar_display.dart new file mode 100644 index 0000000..44ee32f --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_focus_dot_bar_display.dart @@ -0,0 +1,75 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; + +class DiagnosisFocusDotBarDisplay extends StatelessWidget { + final int length; + final List titles; + final List colors; + final int? focusIndex; + + const DiagnosisFocusDotBarDisplay({ + super.key, + required this.length, + required this.titles, + required this.colors, + this.focusIndex, + }); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: List.generate( + length, + (index) => _FocusDotDisplay( + title: titles[index], + color: colors[index], + focus: focusIndex == null ? true : index == focusIndex, + ), + ).separator(SizedBox(width: 18.sp)).toList(), + ); + } +} + +class _FocusDotDisplay extends StatelessWidget { + final String title; + final Color color; + final bool focus; + + const _FocusDotDisplay({ + required this.title, + required this.color, + this.focus = false, + }); + + @override + Widget build(BuildContext context) { + return Opacity( + opacity: focus ? 1 : 0.3, + child: Row( + children: [ + Container( + width: 6.sp, + height: 6.sp, + decoration: BoxDecoration(shape: BoxShape.circle, color: color), + ), + Padding( + padding: EdgeInsets.only(left: 6.sp), + child: Text( + title, + style: TextStyle( + color: context.inverseSurface, + fontSize: 9.sp, + fontWeight: FontWeight.w100, + letterSpacing: 1.sp, + ), + ), + ) + ], + ), + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_multi_tag_display.dart b/lib/Component/Diagnosis/diagnosis_multi_tag_display.dart new file mode 100644 index 0000000..a0ece10 --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_multi_tag_display.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_tag_display.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; + +// Todo tag ontap function + +class DiagnosisMultiTagDisplay extends StatelessWidget { + final String title; + final List tags; + + const DiagnosisMultiTagDisplay({ + super.key, + required this.title, + required this.tags, + }); + + @override + Widget build(BuildContext context) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + padding: EdgeInsets.symmetric(vertical: 2.sp), + child: + Text(title, style: context.diagnosisResultDisplayTitleTextStyle), + ), + Expanded( + child: Wrap(spacing: 3.sp, runSpacing: 6.sp, children: tags), + ) + ].separator(SizedBox(width: 6.sp)).toList(), + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_result_container.dart b/lib/Component/Diagnosis/diagnosis_result_container.dart new file mode 100644 index 0000000..a945af8 --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_result_container.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; + +class DiagnosisResultContainer extends StatelessWidget { + final Widget child; + final double? width; + + const DiagnosisResultContainer({ + super.key, + required this.child, + this.width, + }); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + height: 0.5, + color: context.primary.withOpacity(0), + ), + child, + Container( + height: 0.5, + color: context.primary.withOpacity(0.5), + ), + ] + .padding(EdgeInsets.symmetric(horizontal: 27.sp)) + .separator(SizedBox(height: 24.sp)) + .toList(), + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_result_display_topbar.dart b/lib/Component/Diagnosis/diagnosis_result_display_topbar.dart new file mode 100644 index 0000000..93632a6 --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_result_display_topbar.dart @@ -0,0 +1,56 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_report_page.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class DiagnosisResultDisplayTopbar extends StatefulWidget { + // final List controllers; + final Function(DiagnosisReportType?) onValueChanged; + + const DiagnosisResultDisplayTopbar({ + super.key, + // required this.controllers, + required this.onValueChanged, + }); + + @override + State createState() => + _DiagnosisResultDisplayTopbarState(); +} + +class _DiagnosisResultDisplayTopbarState + extends State { + DiagnosisReportType _type = DiagnosisReportType.basicHealth; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Container(height: 16.sp), + CupertinoSlidingSegmentedControl( + groupValue: _type, + children: { + DiagnosisReportType.basicHealth: Padding( + padding: const EdgeInsets.only(left: 12, right: 12), + child: Text(AppLocalizations.of(context).basic_health), + ), + DiagnosisReportType.constitution: + Text(AppLocalizations.of(context).constitution), + DiagnosisReportType.postureIssue: + Text(AppLocalizations.of(context).posture_issue), + }, + onValueChanged: (DiagnosisReportType? value) { + _type = value ?? DiagnosisReportType.basicHealth; + setState(() {}); + widget.onValueChanged(value); + }, + ), + Padding( + padding: EdgeInsets.only(top: 16.sp, left: 27.sp, right: 27.sp), + child: Container(height: 0.15.sp, color: context.primary), + ) + ], + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_score_bar_display.dart b/lib/Component/Diagnosis/diagnosis_score_bar_display.dart new file mode 100644 index 0000000..d782ff2 --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_score_bar_display.dart @@ -0,0 +1,99 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; + +class DiagnosisScoreBarDisplay extends StatelessWidget { + final String title; + final double? titleWidth; + final int score; + final Color barColor; + + const DiagnosisScoreBarDisplay({ + super.key, + required this.title, + this.titleWidth, + required this.score, + required this.barColor, + }); + + @override + Widget build(BuildContext context) { + double indicatorSize = 6.sp; + double barHeight = 6.sp; + + return SizedBox( + height: 27.sp, + child: Row( + children: [ + // Dot + Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: barColor, + ), + width: indicatorSize, + height: indicatorSize, + ), + // Name + Padding( + padding: EdgeInsets.only(right: 6.sp), + child: SizedBox( + width: titleWidth, + child: Text( + title, + style: context.diagnosisResultDisplayTagTextStyle(null), + ), + ), + ), + // Score bar and score + Expanded( + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: Container( + height: barHeight, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(100.sp)), + border: Border.all( + color: context.primary.withOpacity(0.5), + width: 0.5.sp, + ), + ), + ), + ), + Align( + alignment: Alignment.centerLeft, + child: Container( + height: barHeight, + decoration: BoxDecoration( + color: barColor, + borderRadius: BorderRadius.all(Radius.circular(100.sp)), + ), + child: FractionallySizedBox( + alignment: Alignment.centerLeft, + widthFactor: score / 100, + heightFactor: 0.5, + ), + ), + ), + ], + ), + ), + SizedBox( + width: 27.sp, + child: Text( + score.toString(), + textAlign: TextAlign.end, + style: context.lS!.copyWith( + fontWeight: FontWeight.w700, + letterSpacing: 1.sp, + ), + ), + ), + ].separator(SizedBox(width: 6.sp)).toList(), + ), + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_status_bar_diaplay.dart b/lib/Component/Diagnosis/diagnosis_status_bar_diaplay.dart new file mode 100644 index 0000000..743c394 --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_status_bar_diaplay.dart @@ -0,0 +1,116 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class DiagnosisStatusBarDiaplay extends StatelessWidget { + final int length; + final List flexs; + final List texts; + final List colors; + final double indicatorFactor; + + const DiagnosisStatusBarDiaplay({ + super.key, + required this.length, + required this.flexs, + required this.texts, + required this.colors, + required this.indicatorFactor, + }); + + @override + Widget build(BuildContext context) { + double indicatorSize = 12.sp; + + return Center( + child: SizedBox( + height: 48.sp, + child: Stack( + children: [ + Align( + alignment: Alignment.center, + child: Container( + padding: EdgeInsets.symmetric(horizontal: indicatorSize / 2), + height: 4.sp, + child: Row( + children: List.generate( + length, + (int index) { + return _DiagnosisStatusBarElement( + flex: flexs[index], + color: colors[index], + ); + }, + ), + ), + ), + ), + Align( + alignment: FractionalOffset(indicatorFactor, 0.5), + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: context.inverseSurface.withOpacity(0.75), + ), + width: indicatorSize, + height: indicatorSize, + child: FractionallySizedBox( + widthFactor: 0.5, + heightFactor: 0.5, + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: context.surface, + ), + ), + ), + ), + ), + Align( + alignment: Alignment.bottomCenter, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: indicatorSize / 2), + child: Row( + children: List.generate( + length, + (int index) { + return Flexible( + fit: FlexFit.tight, + flex: flexs[index], + child: Text( + texts[index], + textAlign: TextAlign.center, + style: context.lS, + ), + ); + }, + ), + ), + ), + ), + ], + ), + ), + ); + } +} + +class _DiagnosisStatusBarElement extends StatelessWidget { + final int flex; + final Color color; + + const _DiagnosisStatusBarElement({this.flex = 1, required this.color}); + + @override + Widget build(BuildContext context) { + return Flexible( + flex: flex, + child: Container( + decoration: BoxDecoration( + color: color, + borderRadius: BorderRadius.all(Radius.circular(100.sp)), + ), + ), + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_tag_display.dart b/lib/Component/Diagnosis/diagnosis_tag_display.dart new file mode 100644 index 0000000..0e1cb63 --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_tag_display.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class DiagnosisTagDisplay extends StatelessWidget { + final Color backgroundColor; + final String tag; + final Function()? onTap; + + const DiagnosisTagDisplay({ + super.key, + required this.backgroundColor, + required this.tag, + this.onTap, + }); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: onTap, + child: Container( + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: BorderRadius.all( + Radius.circular(6.sp), + ), + ), + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 6.sp, vertical: 2.sp), + child: Text( + tag, + style: context.diagnosisResultDisplayTagTextStyle(backgroundColor), + ), + ), + ), + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_text_display.dart b/lib/Component/Diagnosis/diagnosis_text_display.dart new file mode 100644 index 0000000..86f22ff --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_text_display.dart @@ -0,0 +1,44 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class DiagnosisTextDisplay extends StatelessWidget { + final String title; + final String text; + final Color backgroundColor; + final bool visible; + + const DiagnosisTextDisplay({ + super.key, + required this.title, + required this.text, + required this.backgroundColor, + this.visible = true, + }); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(title, style: context.diagnosisResultDisplayTitleTextStyle), + visible + ? Container( + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: BorderRadius.all(Radius.circular(6.sp))), + child: Padding( + padding: EdgeInsets.only( + top: 3.sp, bottom: 3.sp, left: 6.sp, right: 6.sp), + child: Text( + text, + style: context + .diagnosisResultDisplayTagTextStyle(backgroundColor), + ), + ), + ) + : const SizedBox.shrink() + ], + ); + } +} diff --git a/lib/Component/Diagnosis/diagnosis_unit_header.dart b/lib/Component/Diagnosis/diagnosis_unit_header.dart new file mode 100644 index 0000000..222d643 --- /dev/null +++ b/lib/Component/Diagnosis/diagnosis_unit_header.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class DiagnosisUnitHeader extends StatelessWidget { + final String text; + + const DiagnosisUnitHeader({ + super.key, + required this.text, + }); + + @override + Widget build(BuildContext context) { + return Container( + width: context.width(1), + // height: 64.sp, + decoration: BoxDecoration( + border: Border( + top: BorderSide(color: context.primary), + bottom: BorderSide(color: context.primary), + ), + ), + child: Container( + color: context.tertiary, + child: Padding( + padding: EdgeInsets.all(12.sp), + child: Text( + text, + textAlign: TextAlign.justify, + style: context.bM!.copyWith( + color: context.inverseSurface, + letterSpacing: 0.5.sp, + ), + ), + ), + ), + ); + } +} diff --git a/lib/Component/Diagnosis/image_stacker.dart b/lib/Component/Diagnosis/image_stacker.dart new file mode 100644 index 0000000..a4e3f71 --- /dev/null +++ b/lib/Component/Diagnosis/image_stacker.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class ImageStacker extends StatelessWidget { + final String assetPath; + final List assetImages; + final double height; + + const ImageStacker({ + super.key, + required this.assetPath, + required this.assetImages, + required this.height, + }); + + @override + Widget build(BuildContext context) { + Container imageUnit(String imagePath) { + return Container( + // width: context.width(0.75), + height: height, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5.sp), + image: DecorationImage( + image: AssetImage(imagePath), + fit: BoxFit.fitHeight, + // alignment: FractionalOffset(0, (0 / 1000) * -1), + ), + ), + ); + } + + return Stack( + alignment: Alignment.center, + children: [ + Opacity(opacity: 0.5, child: imageUnit('$assetPath/main.png')), + ] + + assetImages + .map((assetImage) => imageUnit('$assetPath/$assetImage.png')) + .toList(), + ); + } +} diff --git a/lib/Component/Profile/profile_footer.dart b/lib/Component/Profile/profile_footer.dart new file mode 100644 index 0000000..1f0a8eb --- /dev/null +++ b/lib/Component/Profile/profile_footer.dart @@ -0,0 +1,22 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class ProfileFooter extends StatelessWidget { + final String text; + + const ProfileFooter({ + super.key, + required this.text, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.only(top: 12.sp), + child: Text( + text, + textAlign: TextAlign.justify, + ), + ); + } +} diff --git a/lib/Component/Profile/profile_form_row.dart b/lib/Component/Profile/profile_form_row.dart new file mode 100644 index 0000000..f225fd4 --- /dev/null +++ b/lib/Component/Profile/profile_form_row.dart @@ -0,0 +1,42 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/tap_container.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class ProfileFormRow extends StatelessWidget { + final String prefixText; + final IconData childIcon; + final Function()? onTap; + + const ProfileFormRow({ + super.key, + required this.prefixText, + required this.childIcon, + this.onTap, + }); + + @override + Widget build(BuildContext context) { + return TapContainer( + onTap: onTap, + child: CupertinoFormRow( + padding: EdgeInsets.all(16.sp), + prefix: Text( + prefixText, + style: TextStyle( + fontFamily: 'CupertinoSystemText', + inherit: false, + fontSize: 17.0, + fontWeight: FontWeight.w400, + textBaseline: TextBaseline.alphabetic, + color: context.inversePrimary, + ), + ), + child: Icon( + childIcon, + color: context.primary, + ), + ), + ); + } +} diff --git a/lib/Component/Service/service_items_filter.dart b/lib/Component/Service/service_items_filter.dart new file mode 100644 index 0000000..17beca1 --- /dev/null +++ b/lib/Component/Service/service_items_filter.dart @@ -0,0 +1,246 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Entity/entity.dart'; +import 'package:lamiter/Class/Service/service_item_filt_type.dart'; +import 'package:lamiter/Component/Button/top_bar_filled_button.dart'; +import 'package:lamiter/Component/TextField/top_bar_text_field.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/Service/service_item_provider.dart'; +import 'package:provider/provider.dart'; + +class ServiceItemsFilter + extends StatelessWidget { + const ServiceItemsFilter({super.key}); + + @override + Widget build(BuildContext context) { + final filtTypes = context.select>( + (provider) => provider.filtTypes()); + final count = context.select((provider) => provider.filtCount()); + + return Column( + children: [ + Container(height: 6.sp), + Padding( + padding: EdgeInsets.symmetric(horizontal: 6.sp), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: EdgeInsets.only(right: 12.sp), + child: Badge( + label: Text(count.toString()), + isLabelVisible: count != 0, + offset: const Offset(0, 0), + child: TopBarFilledButton( + iconData: Icons.tune_outlined, + onPressed: () { + FocusManager.instance.primaryFocus?.unfocus(); + showModalBottomSheet( + context: context, + showDragHandle: false, + isScrollControlled: true, + builder: (BuildContext context) { + return SafeArea( + child: Column( + mainAxisSize: MainAxisSize.min, + children: filtTypes + .map((type) => + _FilterListLayout(type: type)) + .separator( + Padding( + padding: EdgeInsets.only( + top: 9.sp, bottom: 3.sp), + child: Divider( + color: + context.primary.withOpacity(0.25), + indent: 16.sp, + ), + ), + ) + .firstPadding(EdgeInsets.only(top: 18.sp)) + .lastPadding(EdgeInsets.only(bottom: 6.sp)) + .toList(), + ), + ); + }, + ); + }, + ), + ), + ), + TopBarTextField(onChanged: context.read().updateKeyword), + ], + ), + ), + Padding( + padding: EdgeInsets.only(top: 16.sp), + child: Container(height: 0.5.sp, color: context.primary), + ) + ], + ); + } +} + +class _FilterListLayout extends StatelessWidget { + final ServiceItemFiltType type; + + const _FilterListLayout({required this.type}); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + late List items; + late bool visible; + switch (type) { + case ServiceItemFiltType.supportCompany: + items = context.select>( + (provider) => provider.companyPairs, + ); + visible = context.select( + (provider) => provider.selectedCompanyIds.isNotEmpty, + ); + break; + case ServiceItemFiltType.productCategory: + items = context.select>( + (provider) => provider.productCategoryPairs, + ); + visible = context.select( + (provider) => provider.selectedProductCategoryIds.isNotEmpty, + ); + break; + case ServiceItemFiltType.urbanDisease: + items = context.select>( + (provider) => provider.urbanDiseasePairs, + ); + visible = context.select( + (provider) => provider.selectedUrbanDiseaseIds.isNotEmpty, + ); + break; + case ServiceItemFiltType.constitution: + items = context.select>( + (provider) => provider.constitutionPairs, + ); + visible = context.select( + (provider) => provider.selectedConstitutionIds.isNotEmpty, + ); + break; + case ServiceItemFiltType.postureIssue: + items = context.select>( + (provider) => provider.postureIssuePairs, + ); + visible = context.select( + (provider) => provider.selectedPostureIssueIds.isNotEmpty, + ); + default: + break; + } + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + alignment: Alignment.centerLeft, + padding: EdgeInsets.only(left: 16.sp), + child: Row( + children: [ + Text( + languageProvider.getLocaleString(type.string), + style: context.lL!.copyWith( + fontWeight: FontWeight.bold, + color: context.inverseSurface.withOpacity(0.75), + letterSpacing: 0.6.sp, + ), + ), + Visibility( + visible: visible, + child: Padding( + padding: EdgeInsets.only(left: 5.sp), + child: Container( + padding: EdgeInsets.all(3.sp), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red.shade900, + ), + ), + ), + ) + ], + ), + ), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Wrap( + spacing: 8.sp, + // runSpacing: 6.sp, + children: items + .map((item) => _FilterUnitLayout(type: type, item: item)) + .firstPadding(EdgeInsets.only(left: 16.sp)) + .lastPadding(EdgeInsets.only(right: 16.sp)) + .toList(), + ), + ), + ].separator(SizedBox(height: 9.sp)).toList(), + ); + } +} + +class _FilterUnitLayout extends StatelessWidget { + final ServiceItemFiltType type; + final dynamic item; + + const _FilterUnitLayout({ + required this.type, + required this.item, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + final bool selected = context.select((provider) => + provider.findServiceItemFiltTypeWithId(type, item.id) != -1); + + return GestureDetector( + onTap: () { + context.read().updateServiceItemFiltType(type, item.id); + }, + child: Badge( + isLabelVisible: selected, + backgroundColor: Colors.transparent, + offset: Offset.zero, + label: Container( + width: 6.sp, + height: 6.sp, + decoration: BoxDecoration( + color: context.error, + shape: BoxShape.circle, + ), + ), + child: Container( + decoration: BoxDecoration( + color: selected ? context.surface : context.surface, + border: Border.all( + color: context.inverseSurface.withOpacity(selected ? 1 : 0.5), + ), + borderRadius: BorderRadius.circular(3.sp), + ), + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: 18.sp, + vertical: 6.sp, + ), + child: Text( + languageProvider.getLocaleString(item.name), + style: context.lMM!.copyWith( + color: context.inverseSurface.withOpacity(selected ? 1 : 0.5), + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/Component/TextField/top_bar_text_field.dart b/lib/Component/TextField/top_bar_text_field.dart new file mode 100644 index 0000000..d204ec5 --- /dev/null +++ b/lib/Component/TextField/top_bar_text_field.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class TopBarTextField extends StatelessWidget { + final Function(String)? onChanged; + + const TopBarTextField({super.key, this.onChanged}); + + @override + Widget build(BuildContext context) { + return Expanded( + child: TextField( + style: context.tM, + decoration: InputDecoration( + hintText: AppLocalizations.of(context).keyword, + isDense: true, + border: const OutlineInputBorder(), + ), + onChanged: onChanged, + ), + ); + } +} diff --git a/lib/Component/bottom_popup_message.dart b/lib/Component/bottom_popup_message.dart new file mode 100644 index 0000000..d3e93eb --- /dev/null +++ b/lib/Component/bottom_popup_message.dart @@ -0,0 +1,75 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:provider/provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; + +// enum PopupMessageType { +// serverError('伺服器異常。請稍後重試,或聯繫開發人員。', Colors.red), +// formIncompleteError('請填寫所有必填欄位。', Colors.red), +// copySuccess('複製成功!', null), +// screenshotSuccess('截圖成功!', null); + +// final String message; +// final Color? color; +// const PopupMessageType(this.message, this.color); +// } + +class BottomPopupMessage extends StatefulWidget { + final double height; + + const BottomPopupMessage({ + required super.key, + required this.height, + }); + + @override + State createState() => BottomPopupMessageState(); +} + +class BottomPopupMessageState extends State { + bool _enabled = false; + String _message = ''; + Color _color = Colors.transparent; + + void showMessage(String message, Color color) async { + _enabled = true; + _message = message; + _color = color; + setState(() {}); + Future.delayed(const Duration(seconds: 3), () { + _enabled = false; + _message = ''; + _color = Colors.transparent; + setState(() {}); + }); + } + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return AnimatedPositioned( + bottom: _enabled ? widget.height : -60.sp, + duration: Durations.short3, + curve: Curves.easeOutSine, + child: Container( + decoration: BoxDecoration( + color: _color, + borderRadius: BorderRadius.circular(32.sp), + ), + padding: EdgeInsets.symmetric( + vertical: 6.sp, + horizontal: 14.sp, + ), + child: Text( + languageProvider.getLocaleString(_message), + style: context.tM!.copyWith( + color: context.surface, + fontWeight: FontWeight.bold, + ), + ), + ), + ); + } +} diff --git a/lib/Component/circle_avator.dart b/lib/Component/circle_avator.dart new file mode 100644 index 0000000..353417e --- /dev/null +++ b/lib/Component/circle_avator.dart @@ -0,0 +1,95 @@ +import 'dart:convert'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class MyCircleAvator extends StatelessWidget { + final String name; + final String? photo; + final bool? gender; + final double radius; + final List? actions; + + const MyCircleAvator({ + super.key, + required this.name, + this.photo, + this.gender, + required this.radius, + this.actions, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + Widget _familyNameCircleAvatar(backgroundColor, style) { + return CircleAvatar( + radius: radius, + backgroundColor: backgroundColor, + child: Text( + languageProvider.getLocaleString(name.isEmpty ? '訪' : name[0]), + style: style, + ), + ); + } + + Widget _photoCircleAvatar(String img64) { + return Container( + width: radius * 2, + height: radius * 2, + decoration: BoxDecoration( + shape: BoxShape.circle, + image: DecorationImage( + image: MemoryImage(base64Decode(img64)), + fit: BoxFit.cover, + // alignment: FractionalOffset(0, (0 / 1000) * -1), + ), + ), + ); + } + + Widget returnCircleAvatar() { + return photo == null && gender == null + ? _familyNameCircleAvatar( + context.inverseSurface, + TextStyle( + color: context.surface, + fontSize: radius * 0.75, + fontWeight: FontWeight.bold, + ), + ) + : _photoCircleAvatar( + photo ?? (gender! ? maleDefaultImage : femaleDefaultImage)); + } + + return actions == null || actions!.isEmpty + ? returnCircleAvatar() + : GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) => CupertinoActionSheet( + actions: actions, + cancelButton: CupertinoActionSheetAction( + isDefaultAction: true, + child: Text(AppLocalizations.of(context).cancel), + onPressed: () { + Navigator.pop(context); + }, + ), + ), + ); + }, + child: returnCircleAvatar(), + ); + } + + final maleDefaultImage = + '/9j/4AAQSkZJRgABAgAAZABkAAD/4QCwRXhpZgAATU0AKgAAAAgAAwEOAAIAAABXAAAAMgESAAMAAAABAAEAAIdpAAQAAAABAAAAigAAAABQaWN0dXJlIHByb2ZpbGUgaWNvbi4gTWFsZSBpY29uLiBIdW1hbiBvciBwZW9wbGUgc2lnbiBhbmQgc3ltYm9sLiBWZWN0b3IgaWxsdXN0cmF0aW9uLgAAAAKQAAAHAAAABDAyMzGgAQADAAAAAf//AAAAAAAA/+ETU2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9IkRCN0Q3MEEwQTk0OTY2NTE2OTQ0RkZCNjExNDQ1NjA4IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9IkRCN0Q3MEEwQTk0OTY2NTE2OTQ0RkZCNjExNDQ1NjA4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBiYmVmMzY1LTNjY2ItNTg0ZS1iODYxLTk5NzA5NTliNWM2ZCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTA5LTE3VDIwOjA5OjUyKzA3OjAwIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGFmNDRhNWYtOWEyMC1kMzQzLWI5YjAtN2VkOWM4Y2NmYjVhIiBzdEV2dDp3aGVuPSIyMDIwLTA5LTE3VDIwOjA5OjUyKzA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ2FtZXJhIFJhdyAxMi40IiBzdEV2dDpjaGFuZ2VkPSIvbWV0YWRhdGEiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjBiYmVmMzY1LTNjY2ItNTg0ZS1iODYxLTk5NzA5NTliNWM2ZCIgc3RFdnQ6d2hlbj0iMjAyMC0wOS0xN1QyMDowOTo1MiswNzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENhbWVyYSBSYXcgMTIuNCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii9tZXRhZGF0YSIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPGRjOmRlc2NyaXB0aW9uPiA8cmRmOkFsdD4gPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5QaWN0dXJlIHByb2ZpbGUgaWNvbi4gTWFsZSBpY29uLiBIdW1hbiBvciBwZW9wbGUgc2lnbiBhbmQgc3ltYm9sLiBWZWN0b3IgaWxsdXN0cmF0aW9uLjwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwvZGM6ZGVzY3JpcHRpb24+IDxkYzpzdWJqZWN0PiA8cmRmOkJhZz4gPHJkZjpsaT5wcm9maWxlPC9yZGY6bGk+IDxyZGY6bGk+Ymxhbms8L3JkZjpsaT4gPHJkZjpsaT5waWM8L3JkZjpsaT4gPHJkZjpsaT5waWN0dXJlPC9yZGY6bGk+IDxyZGY6bGk+aGVhZDwvcmRmOmxpPiA8cmRmOmxpPmljb248L3JkZjpsaT4gPHJkZjpsaT50aHVtYm5haWw8L3JkZjpsaT4gPHJkZjpsaT5waG90b2dyYXBoPC9yZGY6bGk+IDxyZGY6bGk+dmVjdG9yPC9yZGY6bGk+IDxyZGY6bGk+YW5vbnltb3VzPC9yZGY6bGk+IDxyZGY6bGk+YXZhdGFyPC9yZGY6bGk+IDxyZGY6bGk+Y29udGVudDwvcmRmOmxpPiA8cmRmOmxpPmRlZmF1bHQ8L3JkZjpsaT4gPHJkZjpsaT5kZXNpZ248L3JkZjpsaT4gPHJkZjpsaT5kaWdpdGFsPC9yZGY6bGk+IDxyZGY6bGk+ZGlzcGxheTwvcmRmOmxpPiA8cmRmOmxpPmVsZW1lbnQ8L3JkZjpsaT4gPHJkZjpsaT5mYWNlbGVzczwvcmRmOmxpPiA8cmRmOmxpPmZpbG08L3JkZjpsaT4gPHJkZjpsaT5mcmFtZTwvcmRmOmxpPiA8cmRmOmxpPmdyYXBoaWM8L3JkZjpsaT4gPHJkZjpsaT5ncmF5PC9yZGY6bGk+IDxyZGY6bGk+Z3V5PC9yZGY6bGk+IDxyZGY6bGk+aHVtYW48L3JkZjpsaT4gPHJkZjpsaT5pbGx1c3RyYXRpb248L3JkZjpsaT4gPHJkZjpsaT5pbWFnZTwvcmRmOmxpPiA8cmRmOmxpPmludGVybmV0PC9yZGY6bGk+IDxyZGY6bGk+bWFsZTwvcmRmOmxpPiA8cmRmOmxpPm1hbjwvcmRmOmxpPiA8cmRmOmxpPm1lbWJlcjwvcmRmOmxpPiA8cmRmOmxpPm11bHRpbWVkaWE8L3JkZjpsaT4gPHJkZjpsaT5uZXR3b3JrPC9yZGY6bGk+IDxyZGY6bGk+b3V0bGluZTwvcmRmOmxpPiA8cmRmOmxpPnBhZ2U8L3JkZjpsaT4gPHJkZjpsaT5wZW9wbGU8L3JkZjpsaT4gPHJkZjpsaT5wZXJzb248L3JkZjpsaT4gPHJkZjpsaT5waG90bzwvcmRmOmxpPiA8cmRmOmxpPnBob3RvZ3JhcGhlcjwvcmRmOmxpPiA8cmRmOmxpPnBob3RvZ3JhcGhpYzwvcmRmOmxpPiA8cmRmOmxpPnBob3RvZ3JhcGh5PC9yZGY6bGk+IDxyZGY6bGk+cG9ydHJhaXQ8L3JkZjpsaT4gPHJkZjpsaT5zaWduPC9yZGY6bGk+IDxyZGY6bGk+c2lsaG91ZXR0ZTwvcmRmOmxpPiA8cmRmOmxpPnNvY2lhbDwvcmRmOmxpPiA8cmRmOmxpPnN5bWJvbDwvcmRmOmxpPiA8cmRmOmxpPnN5bWJvbGljPC9yZGY6bGk+IDxyZGY6bGk+dXBsb2FkaW5nPC9yZGY6bGk+IDxyZGY6bGk+dXNlcjwvcmRmOmxpPiA8cmRmOmxpPndlYnNpdGU8L3JkZjpsaT4gPHJkZjpsaT53aG88L3JkZjpsaT4gPC9yZGY6QmFnPiA8L2RjOnN1YmplY3Q+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+UGljdHVyZSBwcm9maWxlIGljb24uIE1hbGUgaWNvbi4gSHVtYW4gb3IgcGVvcGxlIHNpZ24gYW5kIHN5bWJvbC4gVmVjdG9yLjwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwvZGM6dGl0bGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/7QMsUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAvMcAVoAAxslRxwCAAACAAQcAgUAQFBpY3R1cmUgcHJvZmlsZSBpY29uLiBNYWxlIGljb24uIEh1bWFuIG9yIHBlb3BsZSBzaWduIGFuZCBzeW1ib2wcAhkAB3Byb2ZpbGUcAhkABWJsYW5rHAIZAANwaWMcAhkAB3BpY3R1cmUcAhkABGhlYWQcAhkABGljb24cAhkACXRodW1ibmFpbBwCGQAKcGhvdG9ncmFwaBwCGQAGdmVjdG9yHAIZAAlhbm9ueW1vdXMcAhkABmF2YXRhchwCGQAHY29udGVudBwCGQAHZGVmYXVsdBwCGQAGZGVzaWduHAIZAAdkaWdpdGFsHAIZAAdkaXNwbGF5HAIZAAdlbGVtZW50HAIZAAhmYWNlbGVzcxwCGQAEZmlsbRwCGQAFZnJhbWUcAhkAB2dyYXBoaWMcAhkABGdyYXkcAhkAA2d1eRwCGQAFaHVtYW4cAhkADGlsbHVzdHJhdGlvbhwCGQAFaW1hZ2UcAhkACGludGVybmV0HAIZAARtYWxlHAIZAANtYW4cAhkABm1lbWJlchwCGQAKbXVsdGltZWRpYRwCGQAHbmV0d29yaxwCGQAHb3V0bGluZRwCGQAEcGFnZRwCGQAGcGVvcGxlHAIZAAZwZXJzb24cAhkABXBob3RvHAIZAAxwaG90b2dyYXBoZXIcAhkADHBob3RvZ3JhcGhpYxwCGQALcGhvdG9ncmFwaHkcAhkACHBvcnRyYWl0HAIZAARzaWduHAIZAApzaWxob3VldHRlHAIZAAZzb2NpYWwcAhkABnN5bWJvbBwCGQAIc3ltYm9saWMcAhkACXVwbG9hZGluZxwCGQAEdXNlchwCGQAHd2Vic2l0ZRwCGQADd2hvHAJ4AFZQaWN0dXJlIHByb2ZpbGUgaWNvbi4gTWFsZSBpY29uLiBIdW1hbiBvciBwZW9wbGUgc2lnbiBhbmQgc3ltYm9sLiBWZWN0b3IgaWxsdXN0cmF0aW9uLgA4QklNBCUAAAAAABCZZJb3HoRfkq67Do+i0BuR/+wAEUR1Y2t5AAEABAAAAGQAAP/uAA5BZG9iZQBkwAAAAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//AABEID6APoAMBEQACEQEDEQH/xACkAAEAAgMBAQEBAAAAAAAAAAAAAwkHCAoGBQQCAQEAAAAAAAAAAAAAAAAAAAAAEAEAAQQBAgIIBAQABgsLABsAAgEDBAUGEQcSEyGycxQ0FwgJ1BVWljEiIxZBMtJTkyRRQjMldoe3xzhIGWFSVbU2tjdXd6cYckMml9d4YtNUdISUtIbnWGhxY2R11UZmJzlHEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDuQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta9eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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'; + final femaleDefaultImage = + '/9j/4AAQSkZJRgABAgAAZABkAAD/4QC4RXhpZgAATU0AKgAAAAgAAwEOAAIAAABgAAAAMgESAAMAAAABAAEAAIdpAAQAAAABAAAAkgAAAABXb21hbiBpY29uIGZvciB1c2VyIHByb2ZpbGUuIEZlbWFsZSBpY29uLiBIdW1hbiBvciBwZW9wbGUgc2lnbiBhbmQgc3ltYm9sLiBWZWN0b3IgaWxsdXN0cmF0aW9uLgAAApAAAAcAAAAEMDIzMaABAAMAAAAB//8AAAAAAAD/4RNyaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MCA3OS4xNjA0NTEsIDIwMTcvMDUvMDYtMDE6MDg6MjEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iRTY5MzkzQjVGMjkxNjlCREE1RDU3RjU2RDJGQTdGMzciIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iRTY5MzkzQjVGMjkxNjlCREE1RDU3RjU2RDJGQTdGMzciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2ZhOTg3NTctYzI4NS04OTRlLTljNjQtYzBkY2M2N2QxZGNmIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHhtcDpNZXRhZGF0YURhdGU9IjIwMjAtMDktMTdUMjE6MDU6NDArMDc6MDAiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmYTIwZWZmYi1mYThkLTZkNDEtOTBiMS00OThmMDVmNWE3NDIiIHN0RXZ0OndoZW49IjIwMjAtMDktMTdUMjE6MDU6NDArMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDYW1lcmEgUmF3IDEyLjQiIHN0RXZ0OmNoYW5nZWQ9Ii9tZXRhZGF0YSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2ZhOTg3NTctYzI4NS04OTRlLTljNjQtYzBkY2M2N2QxZGNmIiBzdEV2dDp3aGVuPSIyMDIwLTA5LTE3VDIxOjA1OjQwKzA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ2FtZXJhIFJhdyAxMi40IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iL21ldGFkYXRhIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8ZGM6ZGVzY3JpcHRpb24+IDxyZGY6QWx0PiA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPldvbWFuIGljb24gZm9yIHVzZXIgcHJvZmlsZS4gRmVtYWxlIGljb24uIEh1bWFuIG9yIHBlb3BsZSBzaWduIGFuZCBzeW1ib2wuIFZlY3RvciBpbGx1c3RyYXRpb24uPC9yZGY6bGk+IDwvcmRmOkFsdD4gPC9kYzpkZXNjcmlwdGlvbj4gPGRjOnN1YmplY3Q+IDxyZGY6QmFnPiA8cmRmOmxpPmFic3RyYWN0PC9yZGY6bGk+IDxyZGY6bGk+YWRtaW5pc3RyYXRvcjwvcmRmOmxpPiA8cmRmOmxpPmFzc29jaWF0ZTwvcmRmOmxpPiA8cmRmOmxpPmF2YXRhcjwvcmRmOmxpPiA8cmRmOmxpPmJhY2tncm91bmQ8L3JkZjpsaT4gPHJkZjpsaT5idXNpbmVzczwvcmRmOmxpPiA8cmRmOmxpPmJ1c2luZXNzbWFuPC9yZGY6bGk+IDxyZGY6bGk+Y3VzdG9tZXI8L3JkZjpsaT4gPHJkZjpsaT5kZWZhdWx0PC9yZGY6bGk+IDxyZGY6bGk+ZW1wbG95ZWU8L3JkZjpsaT4gPHJkZjpsaT5lbXBsb3llcjwvcmRmOmxpPiA8cmRmOmxpPmZlbWFsZTwvcmRmOmxpPiA8cmRmOmxpPmZpZ3VyZTwvcmRmOmxpPiA8cmRmOmxpPmZyaWVuZDwvcmRmOmxpPiA8cmRmOmxpPmdpcmw8L3JkZjpsaT4gPHJkZjpsaT5ncmFwaGljPC9yZGY6bGk+IDxyZGY6bGk+Z3V5PC9yZGY6bGk+IDxyZGY6bGk+aHVtYW48L3JkZjpsaT4gPHJkZjpsaT5pY29uPC9yZGY6bGk+IDxyZGY6bGk+aWxsdXN0cmF0aW9uPC9yZGY6bGk+IDxyZGY6bGk+aW1hZ2U8L3JkZjpsaT4gPHJkZjpsaT5pbnRlcm5ldDwvcmRmOmxpPiA8cmRmOmxpPmlzb2xhdGVkPC9yZGY6bGk+IDxyZGY6bGk+bGVhZGVyPC9yZGY6bGk+IDxyZGY6bGk+bG9nbzwvcmRmOmxpPiA8cmRmOmxpPm1hbGU8L3JkZjpsaT4gPHJkZjpsaT5tYW48L3JkZjpsaT4gPHJkZjpsaT5tYW5hZ2VyPC9yZGY6bGk+IDxyZGY6bGk+bWVtYmVyPC9yZGY6bGk+IDxyZGY6bGk+bXVsdGltZWRpYTwvcmRmOmxpPiA8cmRmOmxpPm5ldHdvcms8L3JkZjpsaT4gPHJkZjpsaT5wZW9wbGU8L3JkZjpsaT4gPHJkZjpsaT5wZXJzb248L3JkZjpsaT4gPHJkZjpsaT5waG90bzwvcmRmOmxpPiA8cmRmOmxpPnBob3RvZ3JhcGg8L3JkZjpsaT4gPHJkZjpsaT5waG90b2dyYXBoZXI8L3JkZjpsaT4gPHJkZjpsaT5waG90b2dyYXBoeTwvcmRmOmxpPiA8cmRmOmxpPnBpY3R1cmU8L3JkZjpsaT4gPHJkZjpsaT5wb3J0cmFpdDwvcmRmOmxpPiA8cmRmOmxpPnByb2ZpbGU8L3JkZjpsaT4gPHJkZjpsaT5zaGFwZTwvcmRmOmxpPiA8cmRmOmxpPnNpZ248L3JkZjpsaT4gPHJkZjpsaT5zb2NpYWw8L3JkZjpsaT4gPHJkZjpsaT5zeW1ib2w8L3JkZjpsaT4gPHJkZjpsaT5zeW1ib2xpYzwvcmRmOmxpPiA8cmRmOmxpPnVzZXI8L3JkZjpsaT4gPHJkZjpsaT52ZWN0b3I8L3JkZjpsaT4gPHJkZjpsaT53ZWI8L3JkZjpsaT4gPHJkZjpsaT53ZWJzaXRlPC9yZGY6bGk+IDxyZGY6bGk+d29tYW48L3JkZjpsaT4gPC9yZGY6QmFnPiA8L2RjOnN1YmplY3Q+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+V29tYW4gaWNvbiBmb3IgdXNlciBwcm9maWxlLiBGZW1hbGUgaWNvbi4gSHVtYW4gb3IgcGVvcGxlIHNpZ24gYW5kIHN5bWJvbC4gVmVjdG9yLjwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwvZGM6dGl0bGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/7QNCUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAwkcAVoAAxslRxwCAAACAAQcAgUAQFdvbWFuIGljb24gZm9yIHVzZXIgcHJvZmlsZS4gRmVtYWxlIGljb24uIEh1bWFuIG9yIHBlb3BsZSBzaWduIGEcAhkACGFic3RyYWN0HAIZAA1hZG1pbmlzdHJhdG9yHAIZAAlhc3NvY2lhdGUcAhkABmF2YXRhchwCGQAKYmFja2dyb3VuZBwCGQAIYnVzaW5lc3McAhkAC2J1c2luZXNzbWFu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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/ABFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmx/iLHtrX14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta+vEEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJsf4ix7a19eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta+vEEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJsf4ix7a19eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmx/iLHtrX14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta+vEEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJsf4ix7a19eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmx/iLHtrX14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta+vEEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJsf4ix7a19eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmx/iLHtrX14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta+vEEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJsf4ix7a19eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmx/iLHtrX14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta+vEEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJsf4ix7a19eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmx/iLHtrX14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta+vEEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJsf4ix7a19eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmx/iLHtrX14ghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8AEWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbH+Ise2tfXiCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2P8RY9ta+vEEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJsf4ix7a19eIIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATY/xFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFN/zNv8AHnth/knuP8MQBWOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/EWPbWvrxBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpv5of/1Dv+sz/u/BU2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNj/ABFj21r68QQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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47h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hA/TjuH+A+Z/lfefYQP047h/gPmf5X3n2ED9OO4f4D5n+V959hBZr8tjTcw4/yDuvrNxxjdanB2um4rn0yNrpdpgXLmXp83dY9mzjXcq1ZszhWzursrkfDKXWMK0rGlK0kFs3u+R/UXv7Kf80D3fI/qL39lP8Amge75H9Re/sp/wA0D3fI/qL39lP+aB7vkf1F7+yn/NA93yP6i9/ZT/mge75H9Re/sp/zQPd8j+ovf2U/5oHu+R/UXv7Kf80D3fI/qL39lP8Amge75H9Re/sp/wA0D3fI/qL39lP+aB7vkf1F7+yn/NA93yP6i9/ZT/mge75H9Re/sp/zQPd8j+ovf2U/5oHu+R/UXv7Kf80D3fI/qL39lP8Amge75H9Re/sp/wA0D3fI/qL39lP+aB7vkf1F7+yn/NA93yP6i9/ZT/mge75H9Re/sp/zQPd8j+ovf2U/5oHu+R/UXv7Kf80D3fI/qL39lP8Amge75H9Re/sp/wA0D3fI/qL39lP+aB7vkf1F7+yn/NA93yP6i9/ZT/mge75H9Re/sp/zQPd8j+ovf2U/5oHu+R/UXv7Kf80D3fI/qL39lP8Amge75H9Re/sp/wA0E2Pj5HvFj+gvf8Na/wDFT/8ADj/7kH//2Q=='; +} diff --git a/lib/Component/loading.dart b/lib/Component/loading.dart new file mode 100644 index 0000000..0d3a47f --- /dev/null +++ b/lib/Component/loading.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class Loading extends StatelessWidget { + const Loading({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + width: context.width(1), + height: context.height(1), + color: context.primary.withOpacity(0.25), + child: const Center(child: CircularProgressIndicator()), + ); + } +} diff --git a/lib/Component/logo.dart b/lib/Component/logo.dart new file mode 100644 index 0000000..2a63675 --- /dev/null +++ b/lib/Component/logo.dart @@ -0,0 +1,36 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Provider/image_and_logo_provider.dart'; +import 'package:provider/provider.dart'; + +class Logo extends StatelessWidget { + final double? width; + final double? height; + final Color? color; + + const Logo({ + super.key, + this.width, + this.height, + this.color, + }); + + @override + Widget build(BuildContext context) { + final logo = context.select( + (provider) => provider.logo, + ); + + return SizedBox( + width: width, + height: height, + child: Image.memory( + base64Decode(logo!), + fit: BoxFit.fill, + color: color ?? context.inverseSurface, + ), + ); + } +} diff --git a/lib/Component/q_title.dart b/lib/Component/q_title.dart new file mode 100644 index 0000000..ed97944 --- /dev/null +++ b/lib/Component/q_title.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class QTitle extends StatelessWidget { + final String title; + final bool readOnly; + final bool required; + + const QTitle({ + super.key, + required this.title, + required this.readOnly, + required this.required, + }); + + @override + Widget build(BuildContext context) { + return Row( + children: [ + Expanded( + child: Opacity( + opacity: readOnly ? 0.5 : 0.75, + child: RichText( + text: TextSpan( + style: context.lL, + children: [ + TextSpan(text: title), + TextSpan( + text: required && !readOnly ? ' *' : '', + style: const TextStyle(color: Colors.red), + ), + ], + ), + ), + ), + ), + ], + ); + } +} diff --git a/lib/Component/refresh_indicator.dart b/lib/Component/refresh_indicator.dart new file mode 100644 index 0000000..3816e39 --- /dev/null +++ b/lib/Component/refresh_indicator.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class MyRefreshIndicator extends StatelessWidget { + final Future Function() onRefresh; + final List children; + + const MyRefreshIndicator({ + super.key, + required this.onRefresh, + required this.children, + }); + + @override + Widget build(BuildContext context) { + return RefreshIndicator( + color: context.surface, + backgroundColor: context.inverseSurface, + displacement: 6.sp, + onRefresh: onRefresh, + child: ListView(children: children), + ); + } +} diff --git a/lib/Component/tap_container.dart b/lib/Component/tap_container.dart new file mode 100644 index 0000000..ca9455f --- /dev/null +++ b/lib/Component/tap_container.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; + +class TapContainer extends StatelessWidget { + final Widget child; + final Function()? onTap; + + const TapContainer({ + super.key, + required this.child, + this.onTap, + }); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: onTap, + child: Container( + color: Colors.transparent, + child: child, + ), + ); + } +} diff --git a/lib/Component/tfq_title.dart b/lib/Component/tfq_title.dart new file mode 100644 index 0000000..d1e0038 --- /dev/null +++ b/lib/Component/tfq_title.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class TFQTitle extends StatelessWidget { + final String title; + final bool readOnly; + final bool required; + + const TFQTitle({ + super.key, + required this.title, + required this.readOnly, + required this.required, + }); + + @override + Widget build(BuildContext context) { + return Row( + children: [ + Opacity( + opacity: readOnly ? 0.5 : 0.75, + child: Text(title, style: context.lL), + ), + Text( + required && !readOnly ? ' *' : '', + style: const TextStyle(color: Colors.red), + ), + ], + ); + } +} diff --git a/lib/Component/time_difference_display.dart b/lib/Component/time_difference_display.dart new file mode 100644 index 0000000..37c800b --- /dev/null +++ b/lib/Component/time_difference_display.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class TimeDifferenceDisplay extends StatelessWidget { + final DateTime time; + + const TimeDifferenceDisplay({required this.time}); + + @override + Widget build(BuildContext context) { + Duration difference = DateTime.now().difference(time); + int year = (difference.inDays / 365).floor(); + int month = (difference.inDays / 30).floor(); + int day = difference.inDays; + int hour = difference.inHours; + int minute = difference.inMinutes != 0 ? difference.inMinutes : 1; + + return Text( + (year != 0) + ? '${year}y' + : (month != 0) + ? '${month}mo' + : (day != 0) + ? '$day天' + : (hour != 0) + ? '$hour小時' + : '$minute分', + style: context.lS!.copyWith( + color: context.inverseSurface.withOpacity(0.35), + ), + ); + } +} diff --git a/lib/Component/toggle_info_layout.dart b/lib/Component/toggle_info_layout.dart new file mode 100644 index 0000000..a4079eb --- /dev/null +++ b/lib/Component/toggle_info_layout.dart @@ -0,0 +1,115 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/tap_container.dart'; +import 'package:lamiter/Extension/build_context.dart'; + +class ToggleInfoLayout extends StatefulWidget { + final String title; + final Color? color; + final Widget infoWidget; + final Widget? shareWidget; + final bool initToggle; + final bool fullFit; + + const ToggleInfoLayout({ + super.key, + required this.title, + this.color, + required this.infoWidget, + this.shareWidget, + this.initToggle = false, + this.fullFit = false, + }); + + @override + State createState() => _ToggleInfoLayoutState(); +} + +class _ToggleInfoLayoutState extends State + with AutomaticKeepAliveClientMixin { + late bool _toggle; + + @override + void initState() { + super.initState(); + _toggle = widget.initToggle; + } + + @override + Widget build(BuildContext context) { + super.build(context); + return Container( + decoration: BoxDecoration( + color: _toggle + ? Colors.transparent + : widget.color ?? context.inverseSurface, + border: Border.all( + color: widget.color ?? context.inverseSurface, width: 0.5.sp), + borderRadius: BorderRadius.all( + Radius.circular(10.sp), + ), + ), + child: Column( + children: [ + TapContainer( + onTap: () { + _toggle = !_toggle; + setState(() {}); + }, + child: Container( + width: context.width(1), + padding: EdgeInsets.symmetric(vertical: 16.sp, horizontal: 16.sp), + decoration: BoxDecoration( + color: widget.color ?? context.inverseSurface, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10.sp), + topRight: Radius.circular(10.sp), + bottomLeft: Radius.circular(_toggle ? 0 : 10.sp), + bottomRight: Radius.circular(_toggle ? 0 : 10.sp), + ), + ), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + widget.title, + style: context.tM!.copyWith( + color: context.getInverseColor( + widget.color ?? context.inverseSurface, + ), + fontWeight: FontWeight.bold, + letterSpacing: 1.21.sp, + ), + ), + Row( + children: [ + widget.shareWidget ?? const SizedBox.shrink(), + Icon( + _toggle ? Icons.remove : Icons.add, + color: context.getInverseColor( + widget.color ?? context.inverseSurface), + ), + ], + ) + ], + ), + ), + ), + _toggle + ? Container( + padding: EdgeInsets.symmetric( + vertical: widget.fullFit ? 0 : 18.sp, + horizontal: widget.fullFit ? 0 : 18.sp, + ), + child: widget.infoWidget, + ) + : const SizedBox.shrink(), + ], + ), + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/Extension/build_context.dart b/lib/Extension/build_context.dart new file mode 100644 index 0000000..c53ddf2 --- /dev/null +++ b/lib/Extension/build_context.dart @@ -0,0 +1,78 @@ +import 'dart:math'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +extension BuildContextExtension on BuildContext { + // Size + double width(double factor) => MediaQuery.of(this).size.width * factor; + double height(double factor) => MediaQuery.of(this).size.height * factor; + + // TextStyle + TextStyle? get dL => Theme.of(this).textTheme.displayLarge; + TextStyle? get dM => Theme.of(this).textTheme.displayMedium; + TextStyle? get dS => Theme.of(this).textTheme.displaySmall; + TextStyle? get hL => Theme.of(this).textTheme.headlineLarge; + TextStyle? get hM => Theme.of(this).textTheme.headlineMedium; + TextStyle? get hS => Theme.of(this).textTheme.headlineSmall; + TextStyle? get tL => Theme.of(this).textTheme.titleLarge; + TextStyle? get tM => Theme.of(this).textTheme.titleMedium; + TextStyle? get tS => Theme.of(this).textTheme.titleSmall; + TextStyle? get lL => Theme.of(this).textTheme.labelLarge; + TextStyle? get lMM => + Theme.of(this).textTheme.labelMedium!.copyWith(fontSize: 12.1.sp); + TextStyle? get lM => Theme.of(this).textTheme.labelMedium; + TextStyle? get lS => Theme.of(this).textTheme.labelSmall; + TextStyle? get bL => Theme.of(this).textTheme.bodyLarge; + TextStyle? get bM => Theme.of(this).textTheme.bodyMedium; + TextStyle? get bS => Theme.of(this).textTheme.bodySmall; + + // Color + Color get surface => Theme.of(this).colorScheme.surface; + Color get primary => Theme.of(this).colorScheme.primary; + Color get secondary => Theme.of(this).colorScheme.secondary; + Color get tertiary => Theme.of(this).colorScheme.tertiary; + Color get inverseSurface => Theme.of(this).colorScheme.inverseSurface; + Color get inversePrimary => Theme.of(this).colorScheme.inversePrimary; + Color get error => Theme.of(this).colorScheme.error; + Color getInverseColor(Color color) { + return (color.computeLuminance() > 0.179 && + Theme.of(this).colorScheme.brightness == Brightness.light) + ? Theme.of(this).colorScheme.inverseSurface + : Theme.of(this).colorScheme.surface; + } + + // Border Side + BorderSide get QBorderSide => + BorderSide(color: Theme.of(this).colorScheme.primary.withOpacity(0.25)); + + TextStyle? get diagnosisResultDisplayTitleTextStyle => + Theme.of(this).textTheme.labelLarge!.copyWith( + fontWeight: FontWeight.bold, + color: inverseSurface, + letterSpacing: 1.21.sp, + ); + TextStyle diagnosisResultDisplayTagTextStyle(Color? color) { + return Theme.of(this).textTheme.labelLarge!.copyWith( + fontWeight: FontWeight.bold, + color: color == null ? inverseSurface : getInverseColor(color), + letterSpacing: 1.21.sp, + ); + + // TextStyle( + // fontSize: 12.sp, + // fontWeight: FontWeight.w700, + // letterSpacing: 1.sp, + // color: color == null ? inverseSurface : getInverseColor(color), + // ); + } + + String diagnosisResultDisplayScoreInfos( + double score, List flexs, List infos) { + double temp = score; + for (int i = 0; i < flexs.length; i++) { + if (temp <= flexs[i]) return infos[min(max(i, 0), infos.length - 1)]; + temp -= flexs[i]; + } + return infos.last; + } +} diff --git a/lib/Extension/iterable.dart b/lib/Extension/iterable.dart new file mode 100644 index 0000000..65801da --- /dev/null +++ b/lib/Extension/iterable.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; + +extension IterableExt on Iterable { + Iterable separator(Widget element) sync* { + final iterator = this.iterator; + if (iterator.moveNext()) { + yield iterator.current; + while (iterator.moveNext()) { + yield element; + yield iterator.current; + } + } + } + + Iterable padding(EdgeInsetsGeometry padding) sync* { + final iterator = this.iterator; + while (iterator.moveNext()) { + yield Padding( + padding: padding, + child: iterator.current, + ); + } + } + + Iterable firstPadding(EdgeInsetsGeometry padding) sync* { + final iterator = this.iterator; + bool isFirst = true; + while (iterator.moveNext()) { + if (isFirst) { + isFirst = false; + yield Padding( + padding: padding, + child: iterator.current, + ); + } else { + yield iterator.current; + } + } + } + + Iterable lastPadding(EdgeInsetsGeometry padding) sync* { + final iterator = this.iterator; + Widget? previous; + while (iterator.moveNext()) { + if (previous != null) yield previous; + previous = iterator.current; + } + yield Padding( + padding: padding, + child: previous, + ); + } +} diff --git a/lib/Extension/string.dart b/lib/Extension/string.dart new file mode 100644 index 0000000..262ec13 --- /dev/null +++ b/lib/Extension/string.dart @@ -0,0 +1,7 @@ +extension RegexExt on String { + bool validateEmail() => RegExp( + r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+") + .hasMatch(this); + + bool validatePhoneNumber() => length == 11; +} diff --git a/lib/Mixin/filter.dart b/lib/Mixin/filter.dart new file mode 100644 index 0000000..1197cf0 --- /dev/null +++ b/lib/Mixin/filter.dart @@ -0,0 +1,97 @@ +import 'package:lamiter/Class/Service/product.dart'; +import 'package:lamiter/Class/Service/service_item.dart'; + +mixin Filter { + List? filtedList; + + List sortWithLastUpdateTime(List list) { + if (list.isEmpty) return list; + list.sort((l1, l2) { + return l2.lastUpdateTime.compareTo(l1.lastUpdateTime); + }); + return list; + } + + List filtWithKeyword(List list, String keyword) { + if (keyword == '' || list.isEmpty) return list; + return list + .where((element) => + element.name.toLowerCase().contains(keyword.toLowerCase()) || + element.name.toUpperCase().contains(keyword.toUpperCase())) + .toList(); + } + + List filtWithCompany(List list, List companiesIds) { + if (companiesIds.isEmpty || + list.isEmpty || + list.first.runtimeType is ServiceItem) return list; + return list + .where((element) => companiesIds.contains(element.companyId)) + .toList(); + } + + List filtWithProductCategory( + List list, List productCategoriesIds) { + if (productCategoriesIds.isEmpty || + list.isEmpty || + list.first.runtimeType is Product) return list; + return list.where((product) { + return productCategoriesIds.contains(product.productCategoryId); + }).toList(); + } + + List filtWithHealthConditions( + List list, + List selectedUrbanDiseaseIds, + List selectedConstitutionIds, + List selectedPostureIssueIds) { + // 特殊情況 + if (list.isEmpty || list.first.runtimeType is ServiceItem) return list; + + if (selectedUrbanDiseaseIds.isEmpty && + selectedConstitutionIds.isEmpty && + selectedPostureIssueIds.isEmpty) return list; + + // 篩選到的 item 加入 set + Set serviceItemsSet = {}; + + // 篩選都會疾病 + if (selectedUrbanDiseaseIds.isNotEmpty) { + for (ServiceItem serviceItem in list) { + for (String diseaseId in serviceItem.urbanDiseasesIds!) { + if (selectedUrbanDiseaseIds.contains(diseaseId)) { + serviceItemsSet.add(serviceItem); + break; + } + } + } + } + + // 篩選體質 + if (selectedConstitutionIds.isNotEmpty) { + for (ServiceItem serviceItem in list) { + for (String constitutionId in serviceItem.constitutionsIds!) { + if (selectedConstitutionIds.contains(constitutionId)) { + serviceItemsSet.add(serviceItem); + break; + } + } + } + } + + // 篩選體態 + if (selectedPostureIssueIds.isNotEmpty) { + for (ServiceItem serviceItem in list) { + for (String postureIssueId in serviceItem.postureIssuesIds!) { + if (selectedPostureIssueIds.contains(postureIssueId)) { + serviceItemsSet.add(serviceItem); + break; + } + } + } + } + + // 回傳 set + return serviceItemsSet.toList(); + } +} diff --git a/lib/Page/Diagnosis/diagnosis_compare_report_page.dart b/lib/Page/Diagnosis/diagnosis_compare_report_page.dart new file mode 100644 index 0000000..9136184 --- /dev/null +++ b/lib/Page/Diagnosis/diagnosis_compare_report_page.dart @@ -0,0 +1,198 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_display_topbar.dart'; +import 'package:lamiter/Component/Diagnosis/Report/basic_health_report_page.dart'; +import 'package:lamiter/Component/Diagnosis/Report/constitution_report_page.dart'; +import 'package:lamiter/Component/Diagnosis/Report/posture_issue_report_page.dart'; +import 'package:lamiter/Component/bottom_popup_message.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_report_page.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class DiagnosisCompareReportPage extends StatefulWidget { + final Diagnosis firstDiagnosis; + final Diagnosis secondDiagnosis; + + const DiagnosisCompareReportPage({ + super.key, + required this.firstDiagnosis, + required this.secondDiagnosis, + }); + + @override + State createState() => + _DiagnosisCompareReportPageState(); +} + +class _DiagnosisCompareReportPageState + extends State { + final GlobalKey errorMessageKey = + GlobalKey(); + + int _index = 0; + + void onValueChanged(DiagnosisReportType? value) { + if (value == null) return; + _index = value.index; + setState(() {}); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).diagnosis_compare_report, + shadowColor: Colors.transparent, + ), + body: Stack( + alignment: Alignment.bottomCenter, + children: [ + // _BackgroundImage(), + SafeArea( + bottom: false, + child: Container( + alignment: Alignment.center, + child: Column( + children: [ + DiagnosisResultDisplayTopbar( + onValueChanged: onValueChanged, + ), + Expanded( + child: Stack( + children: [ + SingleChildScrollView( + child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + children: [ + [ + // 尚未處理沒有診斷報告的頁面 + // 尚未處理沒有診斷報告的頁面// 尚未處理沒有診斷報告的頁面 + // 尚未處理沒有診斷報告的頁面// 尚未處理沒有診斷報告的頁面// 尚未處理沒有診斷報告的頁面 + + BasicHealthReportPage( + healthIndexResult: + widget.firstDiagnosis.healthIndexResult, + physicalIndexResult: widget + .firstDiagnosis.physicalIndexResult, + urbanDiseaseResult: widget + .firstDiagnosis.urbanDiseaseResult, + stressIndexResult: + widget.firstDiagnosis.stressIndexResult, + sleepWellIndexResult: widget + .firstDiagnosis.sleepWellIndexResult, + ), + ConstitutionReportPage( + constitutionResult: widget + .firstDiagnosis.constitutionResult, + ), + PostureIssueReportPage( + postureIssueResult: widget + .firstDiagnosis.postureIssueResult, + ), + ][_index], + ] + .lastPadding(EdgeInsets.only(bottom: 32.sp)) + .toList(), + ), + ), + _DiagnosisDateLayout( + diagnosis: widget.firstDiagnosis, + ), + ], + ), + ), + Expanded( + child: Stack( + children: [ + SingleChildScrollView( + child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + children: [ + [ + // 尚未處理沒有診斷報告的頁面 + // 尚未處理沒有診斷報告的頁面// 尚未處理沒有診斷報告的頁面 + // 尚未處理沒有診斷報告的頁面// 尚未處理沒有診斷報告的頁面// 尚未處理沒有診斷報告的頁面 + + BasicHealthReportPage( + healthIndexResult: widget + .secondDiagnosis.healthIndexResult, + physicalIndexResult: widget + .secondDiagnosis.physicalIndexResult, + urbanDiseaseResult: widget + .secondDiagnosis.urbanDiseaseResult, + stressIndexResult: widget + .secondDiagnosis.stressIndexResult, + sleepWellIndexResult: widget + .secondDiagnosis.sleepWellIndexResult, + ), + ConstitutionReportPage( + constitutionResult: widget + .secondDiagnosis.constitutionResult, + ), + PostureIssueReportPage( + postureIssueResult: widget + .secondDiagnosis.postureIssueResult, + ), + ][_index], + ] + .lastPadding(EdgeInsets.only(bottom: 32.sp)) + .toList(), + ), + ), + _DiagnosisDateLayout( + diagnosis: widget.secondDiagnosis, + ), + ], + ), + ), + ] + .separator( + Container(color: context.primary, height: 0.5.sp), + ) + .toList(), + ), + ), + ), + BottomPopupMessage( + key: errorMessageKey, + height: 32.sp, + ), + ], + ), + ), + ); + } +} + +class _DiagnosisDateLayout extends StatelessWidget { + final Diagnosis diagnosis; + + const _DiagnosisDateLayout({required this.diagnosis}); + + @override + Widget build(BuildContext context) { + return Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 2.sp), + child: RotatedBox( + quarterTurns: 1, + child: Text( + '${diagnosis.startTime.year}-${diagnosis.startTime.month}-${diagnosis.startTime.day} ${diagnosis.startTime.hour}:${diagnosis.startTime.minute}:${diagnosis.startTime.second}', + style: context.lS!.copyWith( + fontSize: 9.sp, + color: context.inverseSurface.withOpacity(0.5), + fontWeight: FontWeight.w700, + letterSpacing: 1.sp, + ), + ), + ), + ), + ); + } +} diff --git a/lib/Page/Diagnosis/diagnosis_form_page.dart b/lib/Page/Diagnosis/diagnosis_form_page.dart new file mode 100644 index 0000000..274733d --- /dev/null +++ b/lib/Page/Diagnosis/diagnosis_form_page.dart @@ -0,0 +1,129 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Question/question.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/Button/submit_button.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_unit_header.dart'; +import 'package:lamiter/Component/loading.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class DiagnosisFormPage extends StatefulWidget { + final String title; + final String infoText; + final dynamic prevForm; + + const DiagnosisFormPage({ + super.key, + required this.title, + required this.infoText, + required this.prevForm, + }); + + @override + State> createState() => _DiagnosisFormPageState(); +} + +class _DiagnosisFormPageState + extends State> with AutomaticKeepAliveClientMixin { + final GlobalKey submitButtonKey = + GlobalKey(); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().start(widget.prevForm); + }); + } + + void success() { + Navigator.pop(context); + } + + @override + Widget build(BuildContext context) { + super.build(context); + final questions = + context.select>((provider) => provider.questions); + final enabled = + context.select((provider) => provider.isReadyToSubmit()); + final submitting = + context.select((provider) => provider.submitting); + final loading = context.select((provider) => provider.loading); + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Stack( + alignment: Alignment.bottomCenter, + children: [ + Scaffold( + appBar: TitleAppBar(title: widget.title), + body: SafeArea( + bottom: false, + child: Column( + children: [ + Padding( + padding: EdgeInsets.only(top: 0.sp), + child: DiagnosisUnitHeader(text: widget.infoText), + ), + Expanded( + child: SingleChildScrollView( + child: Column( + children: questions + .padding(EdgeInsets.symmetric(horizontal: 32.sp)) + .separator(SizedBox(height: 32.sp)) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding( + EdgeInsets.only(bottom: context.height(0.121))) + .toList(), + ), + ), + ), + ], + ), + ), + ), + widget.prevForm == null + ? SubmitButton( + key: submitButtonKey, + text: AppLocalizations.of(context).submit, + enabled: enabled, + submitting: submitting, + onTap: () async { + if (!context.read().isReadyToSubmit()) { + // submitButtonKey.currentState + // ?.showMessage(PopupMessageType.formIncompleteError); + return; + } + // bool isSuccess = + // await context.read().submit(context, null); + + Map response = + await context.read().submit(context, null); + if (response.containsKey("success")) { + success(); + return; + } + if (response.containsKey("errorMessage")) { + submitButtonKey.currentState?.showMessage( + response['errorMessage'], + context.error, + ); + return; + } + }, + ) + : const SizedBox.shrink(), + loading ? const Loading() : const SizedBox.shrink(), + ], + ), + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/Page/Diagnosis/diagnosis_page.dart b/lib/Page/Diagnosis/diagnosis_page.dart new file mode 100644 index 0000000..e1ac6c1 --- /dev/null +++ b/lib/Page/Diagnosis/diagnosis_page.dart @@ -0,0 +1,336 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Form/constitution_form.dart'; +import 'package:lamiter/Class/Form/health_index_form.dart'; +import 'package:lamiter/Class/Form/physical_index_form.dart'; +import 'package:lamiter/Class/Form/posture_issue_form.dart'; +import 'package:lamiter/Class/Form/sleep_well_index_form.dart'; +import 'package:lamiter/Class/Form/stress_index_form.dart'; +import 'package:lamiter/Class/Form/urban_disease_form.dart'; +import 'package:lamiter/Class/Form/zong_fu_index_form.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/Button/submit_button.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_row.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_section.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_form_page.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_report_page.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/constitution_form_provider.dart'; +import 'package:lamiter/Provider/Form/health_index_form_provider.dart'; +import 'package:lamiter/Provider/Form/physical_index_form_provider.dart'; +import 'package:lamiter/Provider/Form/posture_issue_form_provider.dart'; +import 'package:lamiter/Provider/Form/sleep_well_index_form_provider.dart'; +import 'package:lamiter/Provider/Form/stress_index_form_provider.dart'; +import 'package:lamiter/Provider/Form/urban_disease_form_provider.dart'; +import 'package:lamiter/Provider/Form/zong_fu_index_form_provider.dart'; +import 'package:lamiter/Provider/User/Client/client_calendar_provider.dart'; +import 'package:lamiter/Provider/User/Client/client_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class DiagnosisPage extends StatefulWidget { + const DiagnosisPage({super.key}); + + @override + State createState() => _DiagnosisPageState(); +} + +class _DiagnosisPageState extends State { + final GlobalKey submitButtonKey = + GlobalKey(); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().start( + context.read().self!, + context.read().self, + ); + }); + } + + @override + Widget build(BuildContext context) { + final enabled = context.select( + (provider) => provider.isReadyToSubmit()); + final submitting = context + .select((provider) => provider.submitting); + + final healthIndexForm = context.select( + (provider) => provider.healthIndexForm); + final physicalIndexForm = + context.select( + (provider) => provider.physicalIndexForm); + final urbanDiseaseForm = + context.select( + (provider) => provider.urbanDiseaseForm); + final stressIndexForm = context.select( + (provider) => provider.stressIndexForm); + final sleepWellIndexForm = + context.select( + (provider) => provider.sleepWellIndexForm); + final constitutionForm = + context.select( + (provider) => provider.constitutionForm); + final zongFuIndexForm = context.select( + (provider) => provider.zongFuIndexForm); + final postureIssueForm = + context.select( + (provider) => provider.postureIssueForm); + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Stack( + alignment: Alignment.bottomCenter, + children: [ + Scaffold( + appBar: TitleAppBar(title: AppLocalizations.of(context).diagnosis), + body: SafeArea( + bottom: false, + child: Stack( + alignment: Alignment.center, + children: [ + ListView( + children: [ + MyCupertinoFormSection( + title: AppLocalizations.of(context).basic_health, + items: [ + MyCupertinoFormRow( + title: + AppLocalizations.of(context).health_index_form, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisFormPage< + HealthIndexFormProvider>( + title: AppLocalizations.of(context) + .health_index_form, + infoText: AppLocalizations.of(context) + .health_index_form_info, + prevForm: healthIndexForm, + ), + ), + ); + }, + completed: healthIndexForm != null, + ), + MyCupertinoFormRow( + title: AppLocalizations.of(context) + .physical_index_form, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisFormPage< + PhysicalIndexFormProvider>( + title: AppLocalizations.of(context) + .physical_index_form, + infoText: AppLocalizations.of(context) + .physical_index_form_info, + prevForm: physicalIndexForm, + ), + ), + ); + }, + completed: physicalIndexForm != null, + ), + MyCupertinoFormRow( + title: + AppLocalizations.of(context).urban_disease_form, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisFormPage< + UrbanDiseaseFormProvider>( + title: AppLocalizations.of(context) + .urban_disease_form, + infoText: AppLocalizations.of(context) + .urban_disease_form_info, + prevForm: urbanDiseaseForm, + ), + ), + ); + }, + completed: urbanDiseaseForm != null, + ), + MyCupertinoFormRow( + title: + AppLocalizations.of(context).stress_index_form, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisFormPage< + StressIndexFormProvider>( + title: AppLocalizations.of(context) + .stress_index_form, + infoText: AppLocalizations.of(context) + .sleep_well_index_form_info, + prevForm: stressIndexForm, + ), + ), + ); + }, + completed: stressIndexForm != null, + ), + MyCupertinoFormRow( + title: AppLocalizations.of(context) + .sleep_well_index_form, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisFormPage< + SleepWellIndexFormProvider>( + title: AppLocalizations.of(context) + .sleep_well_index_form, + infoText: AppLocalizations.of(context) + .sleep_well_index_form_info, + prevForm: sleepWellIndexForm, + ), + ), + ); + }, + completed: sleepWellIndexForm != null, + ), + ], + note: AppLocalizations.of(context).basic_health_footer, + ), + MyCupertinoFormSection( + title: AppLocalizations.of(context).constitution, + items: [ + MyCupertinoFormRow( + title: + AppLocalizations.of(context).constitution_model, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisFormPage< + ConstitutionFormProvider>( + title: AppLocalizations.of(context) + .constitution_model, + infoText: AppLocalizations.of(context) + .constitution_model_info, + prevForm: constitutionForm, + ), + ), + ); + }, + completed: constitutionForm != null, + ), + constitutionForm != null + ? MyCupertinoFormRow( + title: AppLocalizations.of(context) + .zong_fu_index_form, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisFormPage< + ZongFuIndexFormProvider>( + title: AppLocalizations.of(context) + .zong_fu_index_form, + infoText: AppLocalizations.of(context) + .zong_fu_index_form_info, + prevForm: zongFuIndexForm, + ), + ), + ); + }, + completed: zongFuIndexForm != null, + ) + : MyCupertinoFormRow( + title: AppLocalizations.of(context) + .zong_fu_index_form, + customWidget: Text( + AppLocalizations.of(context) + .zong_fu_index_form_not_ready, + style: TextStyle( + fontFamily: 'CupertinoSystemText', + inherit: false, + fontSize: 13.0, + fontWeight: FontWeight.w400, + textBaseline: TextBaseline.alphabetic, + color: context.inversePrimary + .withOpacity(0.5), + ), + ), + ), + ], + note: AppLocalizations.of(context).constitution_footer, + ), + MyCupertinoFormSection( + title: AppLocalizations.of(context).posture_issue, + items: [ + MyCupertinoFormRow( + title: AppLocalizations.of(context) + .posture_issue_model, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisFormPage< + PostureIssueFormProvider>( + title: AppLocalizations.of(context) + .posture_issue_model, + infoText: AppLocalizations.of(context) + .posture_issue_model_info, + prevForm: postureIssueForm, + ), + ), + ); + }, + completed: postureIssueForm != null, + ), + ], + note: AppLocalizations.of(context).posture_issue_footer, + ), + ] + .lastPadding( + EdgeInsets.only(bottom: context.height(0.1))) + .toList(), + ), + ], + ), + ), + ), + SubmitButton( + key: submitButtonKey, + text: AppLocalizations.of(context).diagnosis_report, + enabled: enabled, + submitting: submitting, + onTap: () async { + Map response = + await context.read().submit(); + if (response.containsKey("success")) { + final diagnosis = context.read().diagnosis!; + await context.read().refresh(); + Navigator.pushReplacement( + context, + CupertinoPageRoute( + builder: (context) => + DiagnosisReportPage(diagnosis: diagnosis), + ), + ); + } + if (response.containsKey("errorMessage")) { + submitButtonKey.currentState?.showMessage( + response['errorMessage'], + context.error, + ); + return; + } + }, + ), + ], + ), + ); + } +} diff --git a/lib/Page/Diagnosis/diagnosis_report_page.dart b/lib/Page/Diagnosis/diagnosis_report_page.dart new file mode 100644 index 0000000..cfeea78 --- /dev/null +++ b/lib/Page/Diagnosis/diagnosis_report_page.dart @@ -0,0 +1,258 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Screenshot/screenshot.dart'; +import 'package:lamiter/Class/Screenshot/screenshot_widget.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/Diagnosis/Result/muscles_result_page.dart'; +import 'package:lamiter/Component/Diagnosis/Screenshot/posture_issue_result_screenshot_page.dart'; +import 'package:lamiter/Component/Diagnosis/Screenshot/zong_fu_meridians_result_screenshot_page.dart'; +import 'package:lamiter/Component/Diagnosis/diagnosis_result_display_topbar.dart'; +import 'package:lamiter/Component/Diagnosis/Report/basic_health_report_page.dart'; +import 'package:lamiter/Component/Diagnosis/Report/constitution_report_page.dart'; +import 'package:lamiter/Component/Diagnosis/Report/posture_issue_report_page.dart'; +import 'package:lamiter/Component/bottom_popup_message.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Page/Service/service_page.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +enum DiagnosisReportType { basicHealth, constitution, postureIssue } + +class DiagnosisReportPage extends StatefulWidget { + final Diagnosis diagnosis; + // final bool canMoveOnToServicePage; + + const DiagnosisReportPage({ + super.key, + required this.diagnosis, + }); + + @override + State createState() => _DiagnosisReportPageState(); +} + +class _DiagnosisReportPageState extends State { + final GlobalKey messageKey = + GlobalKey(); + + int _index = 0; + + void onValueChanged(DiagnosisReportType? value) { + if (value == null) return; + _index = value.index; + setState(() {}); + } + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + final Map> screenshot = { + DiagnosisReportType.basicHealth: [ + Screenshot( + children: [ + ScreenshotWidget( + width: 360, + child: BasicHealthReportPage( + healthIndexResult: widget.diagnosis.healthIndexResult, + physicalIndexResult: widget.diagnosis.physicalIndexResult, + urbanDiseaseResult: widget.diagnosis.urbanDiseaseResult, + stressIndexResult: widget.diagnosis.stressIndexResult, + sleepWellIndexResult: widget.diagnosis.sleepWellIndexResult, + ), + ), + ], + ), + ], + DiagnosisReportType.constitution: [ + Screenshot( + children: [ + ScreenshotWidget( + width: 360, + child: ConstitutionReportPage( + constitutionResult: widget.diagnosis.constitutionResult, + ), + ), + ], + ), + ], + DiagnosisReportType.postureIssue: [ + Screenshot( + children: [ + ScreenshotWidget( + width: 560, + child: PostureIssueResultScreenshotPage( + postureIssueResult: widget.diagnosis.postureIssueResult, + ), + ), + ], + ), + Screenshot( + children: [ + ScreenshotWidget( + width: 512, + child: MusclesResultPage( + postureIssueResult: widget.diagnosis.postureIssueResult, + ), + ), + ], + ), + Screenshot( + children: [ + ScreenshotWidget( + width: 512, + child: ZongFuMeridiansResultScreenshotPage( + postureIssueResult: widget.diagnosis.postureIssueResult, + ), + ), + ], + ), + ], + }; + + void screenshot_success() { + messageKey.currentState?.showMessage( + AppLocalizations.of(context).screenshot_success, + context.inversePrimary, + ); + } + + void copy_success() {} + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).diagnosis_report, + // leading: + actions: [ + Padding( + padding: EdgeInsets.only(right: 16.sp), + child: GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) => CupertinoActionSheet( + actions: [ + CupertinoActionSheetAction( + child: Text(AppLocalizations.of(context) + .copy_diagnosis_report_link), + onPressed: () { + Navigator.pop(context); + messageKey.currentState?.showMessage( + AppLocalizations.of(context).copy_success, + context.inversePrimary, + ); + }, + ), + CupertinoActionSheetAction( + child: Text(AppLocalizations.of(context) + .screenshot_diagnosis_report), + onPressed: () async { + Navigator.pop(context); + DiagnosisReportType type = + DiagnosisReportType.values[_index]; + if (widget.diagnosis.hasReport(type)) { + for (var ss in screenshot[type]!) { + await ss.screenshot(languageProvider.locale); + } + } + screenshot_success(); + }, + ), + ], + cancelButton: CupertinoActionSheetAction( + isDefaultAction: true, + child: Text(AppLocalizations.of(context).cancel), + onPressed: () { + Navigator.pop(context); + }, + ), + ), + ); + }, + child: const Icon(Icons.share), + ), + ), + Padding( + padding: EdgeInsets.only(right: 16.sp), + child: GestureDetector( + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + ServicePage(diagnosis: widget.diagnosis), + ), + ); + }, + child: const Icon(Icons.arrow_forward_ios), + ), + ) + ], + shadowColor: Colors.transparent, + ), + body: Stack( + alignment: Alignment.bottomCenter, + children: [ + // _BackgroundImage(), + SafeArea( + bottom: false, + child: Container( + alignment: Alignment.center, + child: Column( + children: [ + DiagnosisResultDisplayTopbar( + onValueChanged: onValueChanged, + ), + Expanded( + child: SingleChildScrollView( + child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + children: [ + [ + BasicHealthReportPage( + healthIndexResult: + widget.diagnosis.healthIndexResult, + physicalIndexResult: + widget.diagnosis.physicalIndexResult, + urbanDiseaseResult: + widget.diagnosis.urbanDiseaseResult, + stressIndexResult: + widget.diagnosis.stressIndexResult, + sleepWellIndexResult: + widget.diagnosis.sleepWellIndexResult, + ), + ConstitutionReportPage( + constitutionResult: + widget.diagnosis.constitutionResult, + ), + PostureIssueReportPage( + postureIssueResult: + widget.diagnosis.postureIssueResult, + ), + ][_index], + ] + .lastPadding(EdgeInsets.only(bottom: 32.sp)) + .toList(), + ), + ), + ), + ], + ), + ), + ), + BottomPopupMessage( + key: messageKey, + height: 32.sp, + ), + ], + ), + ), + ); + } +} diff --git a/lib/Page/Diagnosis/diagnosis_trend_report_page.dart b/lib/Page/Diagnosis/diagnosis_trend_report_page.dart new file mode 100644 index 0000000..8d3dc33 --- /dev/null +++ b/lib/Page/Diagnosis/diagnosis_trend_report_page.dart @@ -0,0 +1,601 @@ +import 'dart:math'; + +import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/constitution.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Diagnosis/posture_issue.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/constitution_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/posture_issue_provider.dart'; +import 'package:lamiter/Provider/User/Client/client_calendar_provider.dart'; +import 'package:lamiter/extension/build_context.dart'; +import 'package:lamiter/extension/iterable.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; + +enum DiagnosisTrendReportType { constitution, postureIssue } + +class DiagnosisTrendReportPage extends StatefulWidget { + final DateTime fromDateTime; + final DateTime toDateTime; + + const DiagnosisTrendReportPage({ + super.key, + required this.fromDateTime, + required this.toDateTime, + }); + + @override + State createState() => _DiagnosisTrendReportState(); +} + +class _DiagnosisTrendReportState extends State + with TickerProviderStateMixin { + DiagnosisTrendReportType _type = DiagnosisTrendReportType.constitution; + + @override + Widget build(BuildContext context) { + final diagnoses = context.select>( + (provider) => provider.getDisgnosesFromTimeRange( + widget.fromDateTime, + widget.toDateTime, + ), + ); + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).diagnosis_trend_picture, + ), + extendBody: true, + body: SafeArea( + bottom: false, + child: Column( + children: [ + Column( + children: [ + Container(height: 16.sp), + CupertinoSlidingSegmentedControl( + groupValue: _type, + children: { + DiagnosisTrendReportType.constitution: Padding( + padding: const EdgeInsets.only(left: 12, right: 12), + child: Text( + AppLocalizations.of(context).constitution_trend), + ), + DiagnosisTrendReportType.postureIssue: Text( + AppLocalizations.of(context).posture_issue_trend, + ), + }, + onValueChanged: (DiagnosisTrendReportType? value) { + _type = value ?? DiagnosisTrendReportType.constitution; + setState(() {}); + }, + ), + Padding( + padding: EdgeInsets.only(top: 16.sp), + child: Container(height: 0.15.sp, color: context.primary), + ) + ], + ), + Expanded( + child: [ + _ConstitutionTrendListLayout(diagnoses: diagnoses), + _PostureIssueTrendListLayout(diagnoses: diagnoses), + ][_type.index], + ), + ], + )), + ), + ); + } +} + +class _ConstitutionTrendListLayout extends StatelessWidget { + final List diagnoses; + + const _ConstitutionTrendListLayout({ + required this.diagnoses, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + final constitutions = + context.select>( + (provider) => provider.elements); + + return ListView( + children: constitutions + .map((constitution) { + List constitution_timestamps = []; + List constitution_values = []; + for (Diagnosis diagnosis in diagnoses) { + if (diagnosis.constitutionResult != null) { + constitution_timestamps.add(diagnosis.startTime); + constitution_values.add(diagnosis.constitutionResult! + .constitution_score(constitution)); + } + } + return _TrendUnitLayout( + title: + '${languageProvider.getLocaleString(constitution.name)}${AppLocalizations.of(context).index}', + timestamps: constitution_timestamps, + values: constitution_values, + ); + }) + .separator( + Divider( + thickness: 0.25, + height: 32.sp, + color: context.inverseSurface.withOpacity(0.25), + ), + ) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding(EdgeInsets.only(bottom: 16.sp)) + .toList(), + ); + } +} + +class _PostureIssueTrendListLayout extends StatelessWidget { + final List diagnoses; + + const _PostureIssueTrendListLayout({ + required this.diagnoses, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + final postureIssues = + context.select>( + (provider) => provider.elements); + + return ListView( + children: postureIssues + .map((postureIssue) { + List posture_issue_timestamps = []; + List posture_issue_values = []; + for (Diagnosis diagnosis in diagnoses) { + if (diagnosis.postureIssueResult != null && + diagnosis.postureIssueResult! + .trend_posture_issue_score(postureIssue) != + null) { + posture_issue_timestamps.add(diagnosis.startTime); + posture_issue_values.add(diagnosis.postureIssueResult! + .trend_posture_issue_score(postureIssue)!); + } + } + return _TrendUnitLayout( + title: + '${languageProvider.getLocaleString(postureIssue.name)}${AppLocalizations.of(context).index}', + timestamps: posture_issue_timestamps, + values: posture_issue_values, + ); + }) + .separator( + Divider( + thickness: 0.25, + height: 32.sp, + color: context.inverseSurface.withOpacity(0.25), + ), + ) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding(EdgeInsets.only(bottom: 16.sp)) + .toList(), + ); + } +} + +Text valueOffset(BuildContext context, num value1, num value2, bool reverse) { + num offset = value2 - value1; + TextStyle style = context.lM!.copyWith( + color: offset > 0 + ? reverse + ? Colors.green + : Colors.red + : offset < 0 + ? reverse + ? Colors.red + : Colors.green + : context.inverseSurface, + fontWeight: FontWeight.bold, + letterSpacing: 1.sp, + ); + return offset == 0 + ? Text('-', style: style) + : offset > 0 + ? Text('▲${offset.abs()}', style: style) + : Text('▼${offset.abs()}', style: style); +} + +class _TrendUnitLayout extends StatefulWidget { + final String title; + final List timestamps; + final List values; + final bool reverse; + + const _TrendUnitLayout({ + super.key, + required this.title, + required this.timestamps, + required this.values, + this.reverse = false, + }); + + @override + State<_TrendUnitLayout> createState() => _TrendUnitLayoutState(); +} + +class _TrendUnitLayoutState extends State<_TrendUnitLayout> { + bool _expanded = false; + + @override + Widget build(BuildContext context) { + TextStyle formTitleStyle = context.lL!.copyWith( + color: context.inverseSurface.withOpacity(0.75), + ); + TextStyle contentTitleStyle = context.lM!.copyWith( + color: context.inverseSurface.withOpacity(0.75), + fontWeight: FontWeight.bold, + ); + + String dateTime2string(DateTime dateTime) { + return '${dateTime.year}-${dateTime.month.toString().padLeft(2, "0")}-${dateTime.day.toString().padLeft(2, "0")}'; + } + + List children = []; + children.add( + Padding( + padding: EdgeInsets.only(bottom: 3.sp), + child: Stack( + children: [ + Row( + children: [ + Flexible( + flex: 2, + fit: FlexFit.tight, + child: Text(AppLocalizations.of(context).timestamp, + style: formTitleStyle), + ), + Flexible( + flex: 1, + fit: FlexFit.tight, + child: Text(AppLocalizations.of(context).value, + style: formTitleStyle), + ), + Flexible( + flex: 1, + fit: FlexFit.tight, + child: Text(AppLocalizations.of(context).value_offset, + style: formTitleStyle), + ), + ], + ), + Align( + alignment: Alignment.centerRight, + child: GestureDetector( + onTap: () { + _expanded = !_expanded; + setState(() {}); + }, + child: Icon( + _expanded ? Icons.arrow_drop_up : Icons.arrow_drop_down, + color: context.inverseSurface.withOpacity(0.75), + ), + ), + ) + ], + ), + ), + ); + if (_expanded) { + children = children + + List.generate( + widget.timestamps.length, + (index) { + return Row( + children: [ + Flexible( + flex: 2, + fit: FlexFit.tight, + child: Text( + dateTime2string(widget.timestamps[index]), + style: contentTitleStyle, + ), + ), + Flexible( + flex: 1, + fit: FlexFit.tight, + child: Text( + widget.values[index].toString(), + style: contentTitleStyle, + ), + ), + Flexible( + flex: 1, + fit: FlexFit.tight, + child: valueOffset( + context, + widget.values[max(0, (index - 1))], + widget.values[index], + widget.reverse, + ), + ), + ], + ); + }, + ) + .separator( + Divider( + thickness: 0.15.sp, + color: context.inverseSurface.withOpacity(0.25), + ), + ) + .toList(); + } + + return Column( + children: [ + // 標題 + Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + widget.title, + style: context.tM!.copyWith( + color: context.inverseSurface, + fontWeight: FontWeight.w700, + letterSpacing: 1.21.sp, + ), + ), + (widget.values.isNotEmpty) + ? valueOffset(context, widget.values.first, widget.values.last, + widget.reverse) + : const SizedBox.shrink(), + ].separator(SizedBox(width: 6.sp)).toList(), + ), + + // 趨勢圖 + _ChartLayout( + timestamps: widget.timestamps, + values: widget.values, + reverse: widget.reverse, + ), + + // 表格 + Padding( + padding: EdgeInsets.symmetric(horizontal: 18.sp), + child: Column(children: children), + ), + ].separator(SizedBox(height: 6.sp)).toList(), + ); + } +} + +class _ChartLayout extends StatelessWidget { + final List timestamps; + final List values; + final bool reverse; + + const _ChartLayout({ + required this.timestamps, + required this.values, + this.reverse = false, + }); + + @override + Widget build(BuildContext context) { + double minValue = 0; + double maxValue = 100; + + Color increasingColor = Colors.red.withOpacity(0.5); + Color decreasingColor = Colors.green.withOpacity(0.5); + Color color = (values.isEmpty) + ? context.inverseSurface + : (values.last - values.first > 0) + ? reverse + ? decreasingColor + : increasingColor + : reverse + ? increasingColor + : decreasingColor; + + List spots = []; + + Map bottomTitleMap = {}; + Widget bottomTitleWidgets(double value, TitleMeta meta) { + Widget text; + if (bottomTitleMap.containsKey(value.toInt())) { + text = Text(bottomTitleMap[value.toInt()]!, style: context.lM); + } else { + text = const Text(''); + } + return Padding( + padding: EdgeInsets.only(top: 6.sp), + child: text, + ); + } + + if (timestamps.isNotEmpty && values.isNotEmpty) { + int totalDays = timestamps.last.difference(timestamps.first).inDays + 1; + spots.add( + FlSpot(-totalDays / 4, values.first <= 50 ? minValue : maxValue)); + for (int i = 0; i < timestamps.length; i++) { + spots.add(FlSpot( + timestamps[i].difference(timestamps.first).inDays.toDouble(), + values[i].toDouble(), + )); + } + spots.add(FlSpot( + timestamps.last.difference(timestamps.first).inDays.toDouble() + + totalDays / 4, + values.last <= 50 ? minValue : maxValue, + )); + + int titleIndex = 0; + DateTime titleDate = DateTime( + timestamps.first.year, + timestamps.first.month, + timestamps.first.day, + ); + while (titleDate.compareTo(timestamps.last) < 0) { + String chineseMonthString = ''; + switch (titleDate.month) { + case 1: + chineseMonthString = '一月'; + break; + case 2: + chineseMonthString = '二月'; + break; + case 3: + chineseMonthString = '三月'; + break; + case 4: + chineseMonthString = '四月'; + break; + case 5: + chineseMonthString = '五月'; + break; + case 6: + chineseMonthString = '六月'; + break; + case 7: + chineseMonthString = '七月'; + break; + case 8: + chineseMonthString = '八月'; + break; + case 9: + chineseMonthString = '九月'; + break; + case 10: + chineseMonthString = '十月'; + break; + case 11: + chineseMonthString = '十一月'; + break; + case 12: + chineseMonthString = '十二月'; + break; + } + bottomTitleMap[titleIndex] = chineseMonthString; + DateTime nextTitleDate = + DateTime(titleDate.year, titleDate.month + 1, 1); + titleIndex += nextTitleDate.difference(titleDate).inDays; + titleDate = nextTitleDate; + } + } + + return SizedBox( + height: context.width(1.21 / 2), + child: OverflowBox( + maxWidth: context.width(1.21), + child: LineChart( + LineChartData( + minY: minValue, + maxY: maxValue, + lineBarsData: [ + LineChartBarData( + color: color, + spots: spots, + dotData: const FlDotData(show: true), + barWidth: 1.sp, + belowBarData: BarAreaData( + show: true, + gradient: LinearGradient( + colors: [color, context.surface], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + isStrokeJoinRound: true, + isCurved: true, + curveSmoothness: 0.033.sp, + preventCurveOverShooting: true, + ) + ], + titlesData: FlTitlesData( + leftTitles: + const AxisTitles(sideTitles: SideTitles(showTitles: false)), + rightTitles: + const AxisTitles(sideTitles: SideTitles(showTitles: false)), + topTitles: + const AxisTitles(sideTitles: SideTitles(showTitles: false)), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 30, + getTitlesWidget: bottomTitleWidgets, + interval: 1, + ), + ), + ), + lineTouchData: LineTouchData( + enabled: true, + touchTooltipData: LineTouchTooltipData( + tooltipMargin: 9.sp, + tooltipPadding: + EdgeInsets.symmetric(horizontal: 16.sp, vertical: 6.sp), + tooltipRoundedRadius: 16.sp, + getTooltipItems: (List touchedBarSpots) { + return touchedBarSpots.map((barSpot) { + final flSpot = barSpot; + return LineTooltipItem( + flSpot.y.round().toString(), + context.lS!.copyWith(fontWeight: FontWeight.w700), + ); + }).toList(); + }, + getTooltipColor: (touchedSpot) { + return color; + }, + // fitInsideHorizontally: true, + // fitInsideVertically: true, + ), + getTouchedSpotIndicator: (barData, spotIndexes) { + return spotIndexes.map((spotIndex) { + return TouchedSpotIndicatorData( + FlLine(color: color, strokeWidth: 1.sp), + FlDotData( + getDotPainter: (spot, percent, barData, index) { + return FlDotCirclePainter( + radius: 6.sp, + color: color, + strokeWidth: 0, + ); + }, + ), + ); + }).toList(); + }, + ), + // gridData: FlGridData(show: false), + borderData: FlBorderData( + show: true, + border: Border( + top: BorderSide( + color: context.inverseSurface.withOpacity(0.5), + width: 0.5.sp, + ), + bottom: BorderSide( + color: context.inverseSurface.withOpacity(1), + width: 0.5.sp, + ), + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/Page/Diagnosis/urban_disease_details_page.dart b/lib/Page/Diagnosis/urban_disease_details_page.dart new file mode 100644 index 0000000..ecdf3f6 --- /dev/null +++ b/lib/Page/Diagnosis/urban_disease_details_page.dart @@ -0,0 +1,217 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/urban_disease.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/toggle_info_layout.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/urban_disease_provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class UrbanDiseaseDetailsPage extends StatelessWidget { + final UrbanDisease? disease; + + const UrbanDiseaseDetailsPage({ + super.key, + required this.disease, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: languageProvider.getLocaleString(disease?.name ?? ''), + ), + body: Stack( + children: [ + // _BackgroundImage(), + SafeArea( + bottom: false, + child: Container( + alignment: Alignment.center, + child: ListView( + children: [ + disease != null + ? _DiseaseLayout(disease: disease!) + : const SizedBox.shrink(), + ], + ), + ), + ), + ], + ), + ), + ); + } +} + +class _DiseaseLayout extends StatefulWidget { + final UrbanDisease disease; + const _DiseaseLayout({required this.disease}); + + @override + State<_DiseaseLayout> createState() => _DiseaseLayoutState(); +} + +class _DiseaseLayoutState extends State<_DiseaseLayout> { + String? image; + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + loadImage(); + }); + } + + Future loadImage() async { + image = await context + .read() + .getImageWithId(context, widget.disease.id); + setState(() {}); + } + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Column( + children: [ + Column( + children: [ + _FixedInfoLayout( + infoWidget: _html2widget( + context, + languageProvider.getLocaleString(widget.disease.info), + ), + ), + ToggleInfoLayout( + title: AppLocalizations.of(context).body_alert, + infoWidget: _image(context, image), + fullFit: true, + ), + ].separator(SizedBox(height: 16.sp)).toList(), + ), + Column( + children: [ + ToggleInfoLayout( + title: AppLocalizations.of(context).western_tips, + infoWidget: _content(context, + languageProvider.getLocaleString(widget.disease.WMTips)), + ), + ToggleInfoLayout( + title: AppLocalizations.of(context).chinese_tips, + infoWidget: _content(context, + languageProvider.getLocaleString(widget.disease.TCMTips)), + ), + ].separator(SizedBox(height: 16.sp)).toList(), + ), + ToggleInfoLayout( + title: AppLocalizations.of(context).urban_syndrome_tips, + infoWidget: _html2widget( + context, + languageProvider.getLocaleString(widget.disease.urbanHealthTips), + ), + ), + ] + .padding(EdgeInsets.symmetric(horizontal: 24.sp)) + .separator(Divider( + indent: 32.sp, + endIndent: 32.sp, + color: context.inverseSurface.withOpacity(0.5), + height: 32.sp, + )) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding(EdgeInsets.only(bottom: 16.sp)) + .toList(), + ); + } +} + +Widget _title(BuildContext context, String text) { + return Text( + text, + style: context.tM!.copyWith(fontWeight: FontWeight.bold), + ); +} + +Widget _content(BuildContext context, String text) { + return SelectableText( + text, + style: context.tM, + textAlign: TextAlign.justify, + ); +} + +Widget _image(BuildContext context, String? img64) { + return SizedBox( + width: double.infinity, // Your desired width + child: AspectRatio( + aspectRatio: 1, // Replace with your image's aspect ratio + child: img64 == null + ? const SizedBox.shrink() + : Image.memory( + base64Decode(img64), + fit: BoxFit.cover, // Fit as needed + ), + ), + ); +} + +Column _html2widget(BuildContext context, String htmlData) { + List widgets = []; + List temp = []; + + for (String line in htmlData.split('
')) { + if (line.contains('')) { + temp = []; + line = line.split('')[1]; + line = line.split('')[0]; + temp.add(_title(context, line)); + } else { + temp.add(_content(context, line)); + widgets.add( + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: temp.separator(SizedBox(height: 6.sp)).toList(), + ), + ); + } + } + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: widgets + .separator( + Divider( + height: 32.sp, + color: context.primary.withOpacity(0.25), + ), + ) + .toList(), + ); +} + +class _FixedInfoLayout extends StatelessWidget { + final Widget infoWidget; + + const _FixedInfoLayout({required this.infoWidget}); + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(vertical: 16.sp, horizontal: 16.sp), + decoration: BoxDecoration( + border: Border.all(color: context.inversePrimary), + ), + child: infoWidget, + ); + } +} diff --git a/lib/Page/Service/MedicalFacility/medical_facility_page.dart b/lib/Page/Service/MedicalFacility/medical_facility_page.dart new file mode 100644 index 0000000..cfdf81e --- /dev/null +++ b/lib/Page/Service/MedicalFacility/medical_facility_page.dart @@ -0,0 +1,221 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Service/MedicalFacility/medical_facility.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/bottom_popup_message.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Service/MedicalFacility/medical_facility_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; + +class MedicalFacilityPage extends StatefulWidget { + const MedicalFacilityPage({ + super.key, + }); + + @override + State createState() => _MedicalFacilityPageState(); +} + +class _MedicalFacilityPageState extends State { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().start(context); + }); + } + + @override + Widget build(BuildContext context) { + final GlobalKey messageKey = + GlobalKey(); + + final medicalFacilities = + context.select>( + (provider) => provider.medicalFacilities); + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).hospital_link, + ), + body: Stack( + alignment: Alignment.bottomCenter, + children: [ + SafeArea( + bottom: false, + child: Container( + alignment: Alignment.center, + child: ListView( + children: medicalFacilities + .map((medicalFacility) => _FixedInfoLayout( + medicalFacility: medicalFacility, + messageKey: messageKey, + )) + .padding(EdgeInsets.symmetric(horizontal: 24.sp)) + .separator(SizedBox(height: 24.sp)) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding(EdgeInsets.only(bottom: 16.sp)) + .toList(), + ), + ), + ), + BottomPopupMessage( + key: messageKey, + height: 32.sp, + ), + ], + ), + ), + ); + } +} + +Widget _title(BuildContext context, String text) { + final languageProvider = Provider.of(context); + return Text( + languageProvider.getLocaleString(text), + style: context.tM!.copyWith(fontWeight: FontWeight.bold), + ); +} + +Widget _content(BuildContext context, String text) { + final languageProvider = Provider.of(context); + return Text( + languageProvider.getLocaleString(text), + style: context.tM, + textAlign: TextAlign.justify, + ); +} + +SizedBox _widget(BuildContext context, String title, String content) { + return SizedBox( + width: context.width(1), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [_title(context, title), _content(context, content)] + .separator(SizedBox(height: 3.sp)) + .toList(), + ), + ); +} + +class _FixedInfoLayout extends StatelessWidget { + final MedicalFacility medicalFacility; + final GlobalKey messageKey; + + const _FixedInfoLayout({ + required this.medicalFacility, + required this.messageKey, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Container( + decoration: BoxDecoration( + color: Colors.transparent, + border: Border.all(color: context.inverseSurface, width: 0.5.sp), + borderRadius: BorderRadius.all(Radius.circular(10.sp)), + ), + child: Column( + children: [ + Container( + width: context.width(1), + padding: EdgeInsets.symmetric(vertical: 16.sp, horizontal: 16.sp), + decoration: BoxDecoration( + color: context.inverseSurface, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10.sp), + topRight: Radius.circular(10.sp), + ), + ), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + languageProvider.getLocaleString(medicalFacility.name), + style: context.tM!.copyWith( + color: context.surface, + fontWeight: FontWeight.bold, + letterSpacing: 1.21.sp, + ), + ), + GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) => CupertinoActionSheet( + actions: [ + CupertinoActionSheetAction( + child: Text(AppLocalizations.of(context) + .copy_hospital_phone_number), + onPressed: () async { + Navigator.pop(context); + await Clipboard.setData(ClipboardData( + text: medicalFacility.phoneNumber)); + messageKey.currentState?.showMessage( + AppLocalizations.of(context).copy_success, + context.inversePrimary, + ); + }, + ), + CupertinoActionSheetAction( + child: Text(AppLocalizations.of(context) + .copy_hospital_email), + onPressed: () async { + Navigator.pop(context); + await Clipboard.setData( + ClipboardData(text: medicalFacility.email)); + messageKey.currentState?.showMessage( + AppLocalizations.of(context).copy_success, + context.inversePrimary, + ); + }, + ), + ], + cancelButton: CupertinoActionSheetAction( + isDefaultAction: true, + child: Text(AppLocalizations.of(context).cancel), + onPressed: () { + Navigator.pop(context); + }, + ), + ), + ); + }, + child: Icon(Icons.share, color: context.surface), + ) + ], + ), + ), + Column( + children: [ + _widget(context, '電話', medicalFacility.phoneNumber), + _widget(context, '電子郵件', medicalFacility.email), + _widget(context, '地址', medicalFacility.address), + ] + .padding(EdgeInsets.symmetric(horizontal: 24.sp)) + .separator(Divider( + indent: 16.sp, + endIndent: 16.sp, + height: 36.sp, + color: context.inverseSurface.withOpacity(0.15), + )) + .firstPadding(EdgeInsets.only(top: 24.sp)) + .lastPadding(EdgeInsets.only(bottom: 24.sp)) + .toList(), + ), + ], + ), + ); + } +} diff --git a/lib/Page/Service/MeridianNetwork/constitution_meridian_network_page.dart b/lib/Page/Service/MeridianNetwork/constitution_meridian_network_page.dart new file mode 100644 index 0000000..512d89f --- /dev/null +++ b/lib/Page/Service/MeridianNetwork/constitution_meridian_network_page.dart @@ -0,0 +1,524 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/acupoint.dart'; +import 'package:lamiter/Class/Diagnosis/constitution.dart'; +import 'package:lamiter/Class/Diagnosis/meridian.dart'; +import 'package:lamiter/Class/Diagnosis/zong_fu_constitution.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Entity/entity.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/bottom_popup_message.dart'; +import 'package:lamiter/Component/toggle_info_layout.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Page/Service/MeridianNetwork/meridian_network_picture_page.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; + +class ConstitutionMeridianNetworkPage extends StatefulWidget { + final Diagnosis? diagnosis; + + const ConstitutionMeridianNetworkPage({ + super.key, + this.diagnosis, + }); + + @override + State createState() => + _ConstitutionMeridianNetworkPageState(); +} + +class _ConstitutionMeridianNetworkPageState + extends State { + final GlobalKey messageKey = + GlobalKey(); + + @override + Widget build(BuildContext context) { + List mainConstitutions = + widget.diagnosis?.constitutionResult?.main_constitutions(context) ?? []; + List subConstitutions = + widget.diagnosis?.constitutionResult?.sub_constitutions(context) ?? []; + List zongFuOrgansIds = + widget.diagnosis?.zongFuIndexResult?.zongFuOrgansIds ?? []; + + List children = []; + + if (mainConstitutions.isNotEmpty) { + children.add( + Column( + children: mainConstitutions + .map( + (constitution) => _MeridianNetworkLayout( + constitution: constitution, + zongFuOrgansIds: zongFuOrgansIds, + isMainConstitution: true, + messageKey: messageKey, + ), + ) + .separator(SizedBox(height: 9.sp)) + .toList(), + ), + ); + } + + if (subConstitutions.isNotEmpty) { + children.add( + Column( + children: subConstitutions + .map( + (constitution) => _MeridianNetworkLayout( + constitution: constitution, + zongFuOrgansIds: zongFuOrgansIds, + isMainConstitution: false, + messageKey: messageKey, + ), + ) + .separator(SizedBox(height: 9.sp)) + .toList(), + ), + ); + } + + if (children.isEmpty) { + children.add( + Container( + padding: EdgeInsets.only(top: 16.sp), + alignment: Alignment.topCenter, + child: Text( + AppLocalizations.of(context).no_matched_meridian_network, + style: context.bL!.copyWith(color: context.inversePrimary), + ), + ), + ); + } + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: + '${AppLocalizations.of(context).constitution_system}(${AppLocalizations.of(context).meridian_network})'), + body: Stack( + alignment: Alignment.topCenter, + children: [ + SafeArea( + bottom: false, + child: ListView( + children: children + .padding(EdgeInsets.symmetric(horizontal: 24.sp)) + .separator(Divider( + indent: 32.sp, + endIndent: 32.sp, + color: context.inverseSurface.withOpacity(0.5), + height: 32.sp, + )) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding(EdgeInsets.only(bottom: 16.sp)) + .toList(), + ), + ), + BottomPopupMessage( + key: messageKey, + height: 32.sp, + ), + ], + ), + ), + ); + } +} + +class _MeridianNetworkLayout extends StatefulWidget { + final Constitution constitution; + final List zongFuOrgansIds; + final bool isMainConstitution; + final GlobalKey messageKey; + + const _MeridianNetworkLayout({ + required this.constitution, + required this.zongFuOrgansIds, + required this.isMainConstitution, + required this.messageKey, + }); + + @override + State<_MeridianNetworkLayout> createState() => _MeridianNetworkLayoutState(); +} + +class _MeridianNetworkLayoutState extends State<_MeridianNetworkLayout> { + Widget? child; + dynamic meridianNetwork; + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + loadMeridianNetwork(); + }); + } + + Future loadMeridianNetwork() async { + final res = await API().get_constitution_meridian_network( + widget.constitution.id, + widget.zongFuOrgansIds, + ); + + if (!res.containsKey("success")) return; + + if (res["success"].containsKey("constitution")) { + meridianNetwork = Constitution.fromJson(res["success"]["constitution"]); + child = _ConstitutionAcupointsLayout(constitution: meridianNetwork); + } + if (res["success"].containsKey("zong_fu_constitution") && + res["success"]["zong_fu_constitution"].isNotEmpty) { + meridianNetwork = res["success"]["zong_fu_constitution"] + .map((json) => ZongFuConstitution.fromJson(json)) + .toList(); + child = _ZongFuConstitutionAcupointsListLayout( + zongFuConstitutions: meridianNetwork, + ); + } + setState(() {}); + } + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + // 無對應臟腑體質 + child ??= Column( + children: [ + Text( + AppLocalizations.of(context).no_matched_zong_fu_constitution, + style: context.tM!.copyWith( + color: context.inverseSurface.withOpacity(0.5), + ), + ), + ], + ); + + Future meridianNetwork2string(dynamic meridianNetwork) async { + if (meridianNetwork.runtimeType == Constitution) { + String temp = '【${meridianNetwork.name}】\n'; + + List acupoints = []; + List meridians = []; + + for (String id in meridianNetwork.relatedAcupointsIds) { + final res = await API().get_acupoint(id); + if (res.containsKey("success")) { + final acupoint = Acupoint.fromJson(res["success"]); + acupoints.add(acupoint); + } + } + for (Acupoint acupoint in acupoints) { + final res = + await API().get_meridian(acupoint.relatedMeridianOrAcupointId); + if (res.containsKey("success")) { + final meridian = Meridian.fromJson(res["success"]); + meridians.add(meridian); + } + } + + for (int i = 0; i < acupoints.length; i++) { + temp += '${acupoints[i].name}(${meridians[i].name})'; + if (i != acupoints.length - 1) temp += '、'; + } + return temp; + } else if ((meridianNetwork.runtimeType == List) && + meridianNetwork.isNotEmpty) { + String temp = '【${widget.constitution.name}】'; + + for (ZongFuConstitution zongFuConstitution in meridianNetwork) { + temp += '\n【${zongFuConstitution.name}】\n'; + + List acupoints = []; + List meridians = []; + + for (String id in zongFuConstitution.relatedAcupointsIds) { + final res = await API().get_acupoint(id); + if (res.containsKey("success")) { + final acupoint = Acupoint.fromJson(res["success"]); + acupoints.add(acupoint); + } + } + for (Acupoint acupoint in acupoints) { + final res = + await API().get_meridian(acupoint.relatedMeridianOrAcupointId); + if (res.containsKey("success")) { + final meridian = Meridian.fromJson(res["success"]); + meridians.add(meridian); + } + } + + for (int i = 0; i < acupoints.length; i++) { + temp += '${acupoints[i].name}(${meridians[i].name})'; + if (i != acupoints.length - 1) temp += '、'; + } + } + return temp; + } + return ''; + } + + return ToggleInfoLayout( + title: widget.isMainConstitution + ? '${AppLocalizations.of(context).main_constitution}:${languageProvider.getLocaleString(widget.constitution.name)}' + : '${AppLocalizations.of(context).sub_constitution}:${languageProvider.getLocaleString(widget.constitution.name)}', + color: widget.isMainConstitution ? Colors.redAccent : Colors.amber, + infoWidget: SizedBox( + width: context.width(1), + child: child, + ), + shareWidget: GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) => CupertinoActionSheet( + actions: [ + CupertinoActionSheetAction( + child: Text( + AppLocalizations.of(context).copy_meridian_network_info), + onPressed: () async { + Navigator.pop(context); + await Clipboard.setData( + ClipboardData( + text: languageProvider.getLocaleString( + await meridianNetwork2string(meridianNetwork), + ), + ), + ); + widget.messageKey.currentState?.showMessage( + AppLocalizations.of(context).copy_success, + context.inversePrimary, + ); + }, + ), + ], + cancelButton: CupertinoActionSheetAction( + isDefaultAction: true, + child: Text(AppLocalizations.of(context).cancel), + onPressed: () { + Navigator.pop(context); + }, + ), + ), + ); + }, + child: Padding( + padding: EdgeInsets.only(right: 6.sp), + child: Icon(Icons.share, size: 18.sp), + ), + ), + ); + } +} + +class _ConstitutionAcupointsLayout extends StatefulWidget { + final Constitution constitution; + + const _ConstitutionAcupointsLayout({ + required this.constitution, + }); + + @override + State<_ConstitutionAcupointsLayout> createState() => + _ConstitutionAcupointsLayoutState(); +} + +class _ConstitutionAcupointsLayoutState + extends State<_ConstitutionAcupointsLayout> { + List acupoints = []; + List meridians = []; + + @override + void initState() { + super.initState(); + loadAcupointsAndMeridians(); + } + + Future loadAcupointsAndMeridians() async { + for (String id in widget.constitution.relatedAcupointsIds) { + final res = await API().get_acupoint(id); + if (res.containsKey("success")) { + final acupoint = Acupoint.fromJson(res["success"]); + acupoints.add(acupoint); + } + } + for (Acupoint acupoint in acupoints) { + final res = + await API().get_meridian(acupoint.relatedMeridianOrAcupointId); + if (res.containsKey("success")) { + final meridian = Meridian.fromJson(res["success"]); + meridians.add(meridian); + } + } + setState(() {}); + } + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Wrap( + spacing: 6.sp, + runSpacing: 3.sp, + children: List.generate( + acupoints.length, + (index) { + return _AcupointAndMeridianLayout( + acupoint: acupoints[index], + meridian: meridians[index], + ); + }, + ), + ) + ], + ); + } +} + +class _ZongFuConstitutionAcupointsListLayout extends StatelessWidget { + final List zongFuConstitutions; + + const _ZongFuConstitutionAcupointsListLayout({ + required this.zongFuConstitutions, + }); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: zongFuConstitutions + .map( + (zongFuConstitution) => _ZongFuConstitutionAcupointsUnitLayout( + zongFuConstitution: zongFuConstitution), + ) + .separator( + Divider( + thickness: 0.25.sp, + height: 24.sp, + color: context.inverseSurface.withOpacity(0.25), + ), + ) + .toList(), + ); + } +} + +class _ZongFuConstitutionAcupointsUnitLayout extends StatefulWidget { + final ZongFuConstitution zongFuConstitution; + + const _ZongFuConstitutionAcupointsUnitLayout({ + required this.zongFuConstitution, + }); + + @override + State<_ZongFuConstitutionAcupointsUnitLayout> createState() => + _ZongFuConstitutionAcupointsUnitLayoutState(); +} + +class _ZongFuConstitutionAcupointsUnitLayoutState + extends State<_ZongFuConstitutionAcupointsUnitLayout> { + List acupoints = []; + List meridians = []; + + @override + void initState() { + super.initState(); + loadAcupointsAndMeridians(); + } + + Future loadAcupointsAndMeridians() async { + for (String id in widget.zongFuConstitution.relatedAcupointsIds) { + final res = await API().get_acupoint(id); + if (res.containsKey("success")) { + final acupoint = Acupoint.fromJson(res["success"]); + acupoints.add(acupoint); + } + } + for (Acupoint acupoint in acupoints) { + final res = + await API().get_meridian(acupoint.relatedMeridianOrAcupointId); + if (res.containsKey("success")) { + final meridian = Meridian.fromJson(res["success"]); + meridians.add(meridian); + } + } + setState(() {}); + } + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _title(context, widget.zongFuConstitution.name), + Wrap( + spacing: 6.sp, + runSpacing: 3.sp, + children: List.generate( + acupoints.length, + (index) { + return _AcupointAndMeridianLayout( + acupoint: acupoints[index], + meridian: meridians[index], + ); + }, + ), + ) + ].separator(SizedBox(height: 6.sp)).toList(), + ); + } +} + +class _AcupointAndMeridianLayout extends StatelessWidget { + final Entity acupoint; + final Entity meridian; + + const _AcupointAndMeridianLayout({ + required this.acupoint, + required this.meridian, + }); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => MeridianNetworkPicturePage( + acupointId: acupoint.id, + meridianId: meridian.id, + ), + ), + ); + }, + child: _content(context, '${acupoint.name}(${meridian.name})'), + ); + } +} + +Widget _title(BuildContext context, String text) { + final languageProvider = Provider.of(context); + return Text( + languageProvider.getLocaleString(text), + style: context.tM!.copyWith(fontWeight: FontWeight.bold), + ); +} + +Widget _content(BuildContext context, String text) { + final languageProvider = Provider.of(context); + return Text( + languageProvider.getLocaleString(text), + style: context.tM, + textAlign: TextAlign.justify, + ); +} diff --git a/lib/Page/Service/MeridianNetwork/meridian_network_page.dart b/lib/Page/Service/MeridianNetwork/meridian_network_page.dart new file mode 100644 index 0000000..939b86f --- /dev/null +++ b/lib/Page/Service/MeridianNetwork/meridian_network_page.dart @@ -0,0 +1,100 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_row.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_section.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Page/Service/MeridianNetwork/constitution_meridian_network_page.dart'; +import 'package:lamiter/Page/Service/MeridianNetwork/posture_issue_meridian_network_page.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class MeridianNetworkPage extends StatelessWidget { + final Diagnosis? diagnosis; + + const MeridianNetworkPage({ + super.key, + this.diagnosis, + }); + + @override + Widget build(BuildContext context) { + List children = []; + List systemChildren = []; + if (diagnosis != null) { + if (diagnosis?.constitutionResult != null) { + systemChildren.add( + MyCupertinoFormRow( + title: AppLocalizations.of(context).constitution_system, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => ConstitutionMeridianNetworkPage( + diagnosis: diagnosis, + ), + ), + ); + }, + ), + ); + } + if (diagnosis?.postureIssueResult != null) { + systemChildren.add( + MyCupertinoFormRow( + title: AppLocalizations.of(context).posture_issue_system, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => PostureIssueMeridianNetworkPage( + diagnosis: diagnosis, + ), + ), + ); + }, + ), + ); + } + } + + if (systemChildren.isEmpty) { + children.add( + Container( + padding: EdgeInsets.only(top: 16.sp), + alignment: Alignment.topCenter, + child: Text( + AppLocalizations.of(context).no_matched_meridian_network, + style: context.bL!.copyWith(color: context.inversePrimary), + ), + ), + ); + } else { + children.add( + MyCupertinoFormSection( + title: AppLocalizations.of(context).matched_system, + items: systemChildren, + ), + ); + } + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).meridian_network, + ), + body: Stack( + alignment: Alignment.topCenter, + children: [ + SafeArea( + bottom: false, + child: ListView(children: children), + ), + ], + ), + ), + ); + } +} diff --git a/lib/Page/Service/MeridianNetwork/meridian_network_picture_page.dart b/lib/Page/Service/MeridianNetwork/meridian_network_picture_page.dart new file mode 100644 index 0000000..4ec5bc1 --- /dev/null +++ b/lib/Page/Service/MeridianNetwork/meridian_network_picture_page.dart @@ -0,0 +1,145 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/acupoint.dart'; +import 'package:lamiter/Class/Diagnosis/meridian.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class MeridianNetworkPicturePage extends StatefulWidget { + final String acupointId; + final String meridianId; + + const MeridianNetworkPicturePage({ + super.key, + required this.acupointId, + required this.meridianId, + }); + + @override + State createState() => + _MeridianNetworkPicturePageState(); +} + +class _MeridianNetworkPicturePageState + extends State { + Acupoint? acupoint; + Meridian? meridian; + String? acupointImage; + String? meridianImage; + + @override + void initState() { + super.initState(); + loadAcupointAndMeridian(); + } + + Future loadAcupointAndMeridian() async { + // 穴位和經絡 + final acupoint_res = await API().get_acupoint(widget.acupointId); + if (acupoint_res.containsKey("success")) { + acupoint = Acupoint.fromJson(acupoint_res["success"]); + } + final meridian_res = await API().get_meridian(widget.meridianId); + if (meridian_res.containsKey("success")) { + meridian = Meridian.fromJson(meridian_res["success"]); + } + // 圖片 + final acupoint_image_res = + await API().get_acupoint_image(widget.acupointId); + if (acupoint_image_res.containsKey("success")) { + acupointImage = acupoint_image_res["success"]["image"]; + } + final meridian_image_res = + await API().get_meridian_image(widget.meridianId); + if (meridian_image_res.containsKey("success")) { + meridianImage = meridian_image_res["success"]["image"]; + } + setState(() {}); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).meridian_network_picture, + ), + body: Stack( + alignment: Alignment.topCenter, + children: [ + SafeArea( + bottom: false, + child: ListView( + children: [ + _PictureLayout( + name: acupoint?.name ?? "", + image: acupointImage, + ), + _PictureLayout( + name: meridian?.name ?? "", + image: meridianImage, + ), + ] + .padding(EdgeInsets.symmetric(horizontal: 24.sp)) + .separator(Divider( + indent: 32.sp, + endIndent: 32.sp, + color: context.inverseSurface.withOpacity(0.5), + height: 32.sp, + )) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding(EdgeInsets.only(bottom: 16.sp)) + .toList(), + ), + ), + ], + ), + ), + ); + } +} + +class _PictureLayout extends StatelessWidget { + final String name; + final String? image; + + const _PictureLayout({ + required this.name, + this.image, + }); + + Widget _image(BuildContext context, String img64) { + return SizedBox( + width: double.infinity, // Your desired width + child: Image.memory( + base64Decode(img64), + fit: BoxFit.fitWidth, // Fit as needed + ), + ); + } + + Widget _title(BuildContext context, String text) { + final languageProvider = Provider.of(context); + return Text(languageProvider.getLocaleString(text), + style: context.tM!.copyWith(fontWeight: FontWeight.bold)); + } + + @override + Widget build(BuildContext context) { + List children = [_title(context, name)]; + if (image != null) children.add(_image(context, image!)); + + return Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: children.separator(SizedBox(height: 3.sp)).toList(), + ); + } +} diff --git a/lib/Page/Service/MeridianNetwork/posture_issue_meridian_network_page.dart b/lib/Page/Service/MeridianNetwork/posture_issue_meridian_network_page.dart new file mode 100644 index 0000000..3e5085c --- /dev/null +++ b/lib/Page/Service/MeridianNetwork/posture_issue_meridian_network_page.dart @@ -0,0 +1,445 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/acupoint.dart'; +import 'package:lamiter/Class/Diagnosis/body_issue.dart'; +import 'package:lamiter/Class/Diagnosis/body_part.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Diagnosis/meridian.dart'; +import 'package:lamiter/Class/Diagnosis/posture_issue.dart'; +import 'package:lamiter/Class/Entity/entity.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/bottom_popup_message.dart'; +import 'package:lamiter/Component/toggle_info_layout.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Page/Service/MeridianNetwork/meridian_network_picture_page.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; + +class PostureIssueMeridianNetworkPage extends StatefulWidget { + final Diagnosis? diagnosis; + + const PostureIssueMeridianNetworkPage({ + super.key, + this.diagnosis, + }); + + @override + State createState() => + _PostureIssueMeridianNetworkPageState(); +} + +class _PostureIssueMeridianNetworkPageState + extends State { + final GlobalKey messageKey = + GlobalKey(); + + List postureIssues = []; + List bodyParts = []; + + @override + void initState() { + super.initState(); + loadBodyParts(); + } + + Future loadBodyParts() async { + postureIssues = + widget.diagnosis?.postureIssueResult?.risk_posture_issues(context) ?? + []; + final res = await API().get_body_parts( + postureIssues.map((postureIssue) => postureIssue.id).toList()); + if (res.containsKey("success")) { + bodyParts = res["success"] + .map((json) => BodyPart.fromJson(json)) + .toList(); + } + setState(() {}); + } + + @override + Widget build(BuildContext context) { + List children = []; + + if (bodyParts.isNotEmpty) { + for (BodyPart bodyPart in bodyParts) { + children.add( + _BodyPartAcupointsLayout( + bodyPart: bodyPart, + postureIssues: postureIssues, + messageKey: messageKey, + ), + ); + } + } else { + children.add( + Container( + padding: EdgeInsets.only(top: 16.sp), + alignment: Alignment.topCenter, + child: Text( + AppLocalizations.of(context).no_matched_meridian_network, + style: context.bL!.copyWith(color: context.inversePrimary), + ), + ), + ); + } + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: + '${AppLocalizations.of(context).posture_issue_system}(${AppLocalizations.of(context).meridian_network})'), + body: Stack( + alignment: Alignment.topCenter, + children: [ + SafeArea( + bottom: false, + child: ListView( + children: children + .padding(EdgeInsets.symmetric(horizontal: 24.sp)) + .separator(Divider( + indent: 32.sp, + endIndent: 32.sp, + color: context.inverseSurface.withOpacity(0.5), + height: 32.sp, + )) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding(EdgeInsets.only(bottom: 16.sp)) + .toList(), + ), + ), + BottomPopupMessage( + key: messageKey, + height: 32.sp, + ), + ], + ), + ), + ); + } +} + +class _BodyPartAcupointsLayout extends StatefulWidget { + final BodyPart bodyPart; + final List postureIssues; + final GlobalKey messageKey; + + const _BodyPartAcupointsLayout({ + required this.bodyPart, + required this.postureIssues, + required this.messageKey, + }); + + @override + State<_BodyPartAcupointsLayout> createState() => + _BodyPartAcupointsLayoutState(); +} + +class _BodyPartAcupointsLayoutState extends State<_BodyPartAcupointsLayout> { + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + List postureIssuesNames = []; + + for (PostureIssue postureIssue in widget.postureIssues) { + if (widget.bodyPart.postureIssuesIds.contains(postureIssue.id)) { + postureIssuesNames.add(postureIssue.name); + } + } + + Color bodyPartColor(String id) { + if (id == 'head_neck') return Colors.amber; + if (id == 'lower_limb') return Colors.green; + if (id == 'hip_pelvis_thigh') return Colors.cyan; + if (id == 'upper_limb') return Colors.orangeAccent; + return Colors.grey; + } + + Future meridianNetwork2string() async { + List bodyIssues = []; + final res = await API().get_body_issues(widget.bodyPart.bodyIssuesIds); + if (res.containsKey("success")) { + bodyIssues = res["success"] + .map((json) => BodyIssue.fromJson(json)) + .toList(); + } + + String temp = '【${widget.bodyPart.name}】'; + for (BodyIssue bodyIssue in bodyIssues) { + temp += '\n【${bodyIssue.name}】\n'; + + List acupoints = []; + List meridians = []; + + for (String id in bodyIssue.relatedAcupointsIds) { + final res = await API().get_acupoint(id); + if (res.containsKey("success")) { + final acupoint = Acupoint.fromJson(res["success"]); + acupoints.add(acupoint); + } + } + for (Acupoint acupoint in acupoints) { + final res = + await API().get_meridian(acupoint.relatedMeridianOrAcupointId); + if (res.containsKey("success")) { + final meridian = Meridian.fromJson(res["success"]); + meridians.add(meridian); + } + } + + for (int i = 0; i < acupoints.length; i++) { + temp += '${acupoints[i].name}(${meridians[i].name})'; + if (i != acupoints.length - 1) temp += '、'; + } + } + return temp; + } + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _title(context, postureIssuesNames.join('、')), + ToggleInfoLayout( + title: languageProvider.getLocaleString(widget.bodyPart.name), + initToggle: false, + color: bodyPartColor(widget.bodyPart.id), + infoWidget: SizedBox( + width: context.width(1), + child: _BodyIssueAcupointsListLayout( + bodyIssuesIds: widget.bodyPart.bodyIssuesIds, + ), + ), + shareWidget: GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) => CupertinoActionSheet( + actions: [ + CupertinoActionSheetAction( + child: Text(AppLocalizations.of(context) + .copy_meridian_network_info), + onPressed: () async { + Navigator.pop(context); + await Clipboard.setData(ClipboardData( + text: languageProvider.getLocaleString( + await meridianNetwork2string(), + ), + )); + widget.messageKey.currentState?.showMessage( + AppLocalizations.of(context).copy_success, + context.inversePrimary, + ); + }, + ), + ], + cancelButton: CupertinoActionSheetAction( + isDefaultAction: true, + child: Text(AppLocalizations.of(context).cancel), + onPressed: () { + Navigator.pop(context); + }, + ), + ), + ); + }, + child: Padding( + padding: EdgeInsets.only(right: 6.sp), + child: Icon(Icons.share, size: 18.sp), + ), + ), + ), + ].separator(SizedBox(height: 9.sp)).toList(), + ); + } +} + +class _BodyIssueAcupointsListLayout extends StatefulWidget { + final List bodyIssuesIds; + + const _BodyIssueAcupointsListLayout({ + required this.bodyIssuesIds, + }); + + @override + State<_BodyIssueAcupointsListLayout> createState() => + _BodyIssueAcupointsListLayoutState(); +} + +class _BodyIssueAcupointsListLayoutState + extends State<_BodyIssueAcupointsListLayout> { + List bodyIssues = []; + + @override + void initState() { + super.initState(); + loadBodyIssues(); + } + + Future loadBodyIssues() async { + final res = await API().get_body_issues(widget.bodyIssuesIds); + if (res.containsKey("success")) { + bodyIssues = res["success"] + .map((json) => BodyIssue.fromJson(json)) + .toList(); + } + setState(() {}); + } + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: bodyIssues + .map( + (bodyIssue) => _BodyIssueAcupointsUnitLayout( + bodyIssue: bodyIssue, + ), + ) + .separator( + Divider( + thickness: 0.25.sp, + height: 24.sp, + color: context.inverseSurface.withOpacity(0.25), + ), + ) + .toList(), + ); + + // Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: + + // bodyIssues + // .map( + // (bodyIssue) => _BodyIssueAcupointsUnitLayout( + // bodyIssue: bodyIssue, + // ), + // ) + // .separator( + // Divider( + // thickness: 0.25.sp, + // height: 24.sp, + // color: context.inverseSurface.withOpacity(0.25), + // ), + // ) + // .toList(), + // ); + } +} + +class _BodyIssueAcupointsUnitLayout extends StatefulWidget { + final BodyIssue bodyIssue; + + const _BodyIssueAcupointsUnitLayout({ + required this.bodyIssue, + }); + + @override + State<_BodyIssueAcupointsUnitLayout> createState() => + _BodyIssueAcupointsUnitLayoutState(); +} + +class _BodyIssueAcupointsUnitLayoutState + extends State<_BodyIssueAcupointsUnitLayout> { + List acupoints = []; + List meridians = []; + + @override + void initState() { + super.initState(); + loadAcupointsAndMeridians(); + } + + Future loadAcupointsAndMeridians() async { + for (String id in widget.bodyIssue.relatedAcupointsIds) { + final res = await API().get_acupoint(id); + if (res.containsKey("success")) { + final acupoint = Acupoint.fromJson(res["success"]); + acupoints.add(acupoint); + } + } + for (Acupoint acupoint in acupoints) { + final res = + await API().get_meridian(acupoint.relatedMeridianOrAcupointId); + if (res.containsKey("success")) { + final meridian = Meridian.fromJson(res["success"]); + meridians.add(meridian); + } + } + setState(() {}); + } + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _title(context, widget.bodyIssue.name), + Wrap( + spacing: 6.sp, + runSpacing: 3.sp, + children: List.generate( + acupoints.length, + (index) { + return _AcupointAndMeridianLayout( + acupoint: acupoints[index], + meridian: meridians[index], + ); + }, + ), + ) + ].separator(SizedBox(height: 6.sp)).toList(), + ); + } +} + +class _AcupointAndMeridianLayout extends StatelessWidget { + final Entity acupoint; + final Entity meridian; + + const _AcupointAndMeridianLayout({ + required this.acupoint, + required this.meridian, + }); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => MeridianNetworkPicturePage( + acupointId: acupoint.id, + meridianId: meridian.id, + ), + ), + ); + }, + child: _content(context, '${acupoint.name}(${meridian.name})'), + ); + } +} + +Widget _title(BuildContext context, String text) { + final languageProvider = Provider.of(context); + return Text( + languageProvider.getLocaleString(text), + style: context.tM!.copyWith(fontWeight: FontWeight.bold), + ); +} + +Widget _content(BuildContext context, String text) { + final languageProvider = Provider.of(context); + return Text( + languageProvider.getLocaleString(text), + style: context.tM, + textAlign: TextAlign.justify, + ); +} diff --git a/lib/Page/Service/SeasonalRecipe/constitution_annual_recipe_page.dart b/lib/Page/Service/SeasonalRecipe/constitution_annual_recipe_page.dart new file mode 100644 index 0000000..2aa63c8 --- /dev/null +++ b/lib/Page/Service/SeasonalRecipe/constitution_annual_recipe_page.dart @@ -0,0 +1,65 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Diagnosis/constitution.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_row.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_section.dart'; +import 'package:lamiter/Page/Service/SeasonalRecipe/constitution_seasonal_recipe_page.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; + +class ConstitutionAnnualRecipePage extends StatelessWidget { + final Constitution constitution; + + const ConstitutionAnnualRecipePage({ + super.key, + required this.constitution, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: + '${languageProvider.getLocaleString(constitution.name)}(${AppLocalizations.of(context).four_season_recipe})'), + body: Stack( + alignment: Alignment.topCenter, + children: [ + SafeArea( + bottom: false, + child: ListView(children: [ + MyCupertinoFormSection( + title: AppLocalizations.of(context).four_season_recipe, + items: SeasonalRecipeType.values + .map( + (type) => MyCupertinoFormRow( + title: languageProvider + .getLocaleString(type.recipeName), + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + ConstitutionSeasonalRecipePage( + constitution: constitution, + type: type, + ), + ), + ); + }, + ), + ) + .toList()), + ]), + ), + ], + ), + ), + ); + } +} diff --git a/lib/Page/Service/SeasonalRecipe/constitution_seasonal_recipe_page.dart b/lib/Page/Service/SeasonalRecipe/constitution_seasonal_recipe_page.dart new file mode 100644 index 0000000..84acb41 --- /dev/null +++ b/lib/Page/Service/SeasonalRecipe/constitution_seasonal_recipe_page.dart @@ -0,0 +1,273 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/constitution.dart'; +import 'package:lamiter/Class/Service/SeasonalRecipe/seasonal_recipe.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/toggle_info_layout.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Service/SeasonalRacipe/constitution_seasonal_recipe_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; + +enum SeasonalRecipeType { + spring(recipeName: '春季食譜'), + summer(recipeName: '夏季食譜'), + fall(recipeName: '秋季食譜'), + winter(recipeName: '冬季食譜'); + + final String recipeName; + const SeasonalRecipeType({required this.recipeName}); +} + +class ConstitutionSeasonalRecipePage extends StatefulWidget { + final Constitution constitution; + final SeasonalRecipeType type; + + const ConstitutionSeasonalRecipePage({ + super.key, + required this.constitution, + required this.type, + }); + + @override + State createState() => + _ConstitutionSeasonalRecipePageState(); +} + +class _ConstitutionSeasonalRecipePageState + extends State { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context + .read() + .start(context, widget.constitution.id, widget.type.name); + }); + } + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + final seasonalRecipes = context.select>((provider) => provider.seasonalRecipes); + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: languageProvider.getLocaleString( + '${widget.constitution.name}(${widget.type.recipeName})')), + body: Stack(alignment: Alignment.topCenter, children: [ + SafeArea( + bottom: false, + child: ListView( + children: List.generate( + 4, + (weekIndex) { + return _WeeklyRecipeLayout( + weekIndex: weekIndex, + seasonalRecipes: seasonalRecipes + .where((recipe) => recipe.weekIndex == weekIndex) + .toList(), + ); + }, + ) + .padding(EdgeInsets.symmetric(horizontal: 24.sp)) + .separator( + Divider( + indent: 32.sp, + endIndent: 32.sp, + color: context.inverseSurface.withOpacity(0.5), + height: 32.sp, + ), + ) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding(EdgeInsets.only(bottom: 16.sp)) + .toList(), + ), + ), + ]), + ), + ); + } +} + +class _WeeklyRecipeLayout extends StatelessWidget { + final int weekIndex; + final List seasonalRecipes; + + const _WeeklyRecipeLayout({ + required this.weekIndex, + required this.seasonalRecipes, + }); + + String getChineseWeekIndex(int index) { + if (weekIndex == 0) { + return '一'; + } else if (weekIndex == 1) { + return '二'; + } else if (weekIndex == 2) { + return '三'; + } else if (weekIndex == 3) { + return '四'; + } else { + return ''; + } + } + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: ([ + // 標題 + Text( + languageProvider + .getLocaleString('每月第${getChineseWeekIndex(weekIndex)}週'), + style: context.tM!.copyWith(fontWeight: FontWeight.bold), + ), + ] + + List.generate(7, (dayIndex) { + final List temp = seasonalRecipes + .where((recipe) => recipe.dayIndex == dayIndex) + .toList(); + + return _DailyRecipeLayout( + dayIndex: dayIndex, + seasonalRecipe: temp.isNotEmpty ? temp.first : null); + })) + .separator(SizedBox(height: 9.sp)) + .toList(), + ); + } +} + +class _DailyRecipeLayout extends StatelessWidget { + final int dayIndex; + final SeasonalRecipe? seasonalRecipe; + + const _DailyRecipeLayout({ + required this.dayIndex, + required this.seasonalRecipe, + }); + + @override + Widget build(BuildContext context) { + return ToggleInfoLayout( + title: 'Day ${dayIndex + 1}', + initToggle: dayIndex == 0, + infoWidget: Column( + children: [ + _MealLayout( + title: AppLocalizations.of(context).breakfast, + icon: Icons.wb_twighlight, + color: Colors.orange, + content: seasonalRecipe?.breakfast ?? "", + ), + _MealLayout( + title: AppLocalizations.of(context).lunch, + icon: Icons.wb_sunny, + color: Colors.red, + content: seasonalRecipe?.lunch ?? "", + ), + _MealLayout( + title: AppLocalizations.of(context).dinner, + icon: Icons.dark_mode, + color: Colors.blue, + content: seasonalRecipe?.dinner ?? "", + ), + ] + .separator(Divider( + thickness: 0.25.sp, + height: 36.sp, + indent: 6.sp, + endIndent: 6.sp, + color: context.inverseSurface.withOpacity(0.25), + )) + .toList(), + ), + ); + } +} + +class _MealLayout extends StatelessWidget { + final String title; + final IconData icon; + final Color color; + final String content; + + const _MealLayout({ + required this.title, + required this.icon, + required this.color, + required this.content, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Column( + children: [ + _MealTitleLayout( + title: languageProvider.getLocaleString(title), + icon: icon, + color: color, + ), + _MealContentLayout( + content: languageProvider.getLocaleString(content), + ), + ].separator(SizedBox(height: 9.sp)).toList(), + ); + } +} + +class _MealTitleLayout extends StatelessWidget { + final IconData icon; + final String title; + final Color color; + + const _MealTitleLayout({ + required this.icon, + required this.title, + required this.color, + }); + + @override + Widget build(BuildContext context) { + return Row( + children: [ + Icon(icon, color: color), + Text( + title, + style: context.tM!.copyWith( + color: color, + fontWeight: FontWeight.bold, + ), + ), + ].separator(SizedBox(width: 6.sp)).toList(), + ); + } +} + +class _MealContentLayout extends StatelessWidget { + final String content; + + const _MealContentLayout({ + required this.content, + }); + + @override + Widget build(BuildContext context) { + return SelectableText( + content, + style: context.tM!.copyWith(height: 1.5.sp), + textAlign: TextAlign.start, + ); + } +} diff --git a/lib/Page/Service/SeasonalRecipe/seasonal_recipe_page.dart b/lib/Page/Service/SeasonalRecipe/seasonal_recipe_page.dart new file mode 100644 index 0000000..e99c5de --- /dev/null +++ b/lib/Page/Service/SeasonalRecipe/seasonal_recipe_page.dart @@ -0,0 +1,111 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/constitution.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_row.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_section.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Page/Service/SeasonalRecipe/constitution_annual_recipe_page.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; + +class SeasonalRecipePage extends StatelessWidget { + final Diagnosis? diagnosis; + + const SeasonalRecipePage({ + super.key, + this.diagnosis, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + List mainConstitutions = + diagnosis?.constitutionResult?.main_constitutions(context) ?? []; + List subConstitutions = + diagnosis?.constitutionResult?.sub_constitutions(context) ?? []; + + List children = []; + if (mainConstitutions.isNotEmpty) { + children.add( + MyCupertinoFormSection( + title: AppLocalizations.of(context).main_constitution, + items: mainConstitutions + .map( + (constitution) => MyCupertinoFormRow( + title: languageProvider.getLocaleString(constitution.name), + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => ConstitutionAnnualRecipePage( + constitution: constitution, + ), + ), + ); + }, + ), + ) + .toList(), + ), + ); + } + if (subConstitutions.isNotEmpty) { + children.add( + MyCupertinoFormSection( + title: AppLocalizations.of(context).sub_constitution, + items: subConstitutions + .map( + (constitution) => MyCupertinoFormRow( + title: languageProvider.getLocaleString(constitution.name), + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => ConstitutionAnnualRecipePage( + constitution: constitution, + ), + ), + ); + }, + ), + ) + .toList(), + ), + ); + } + if (children.isEmpty) { + children.add( + Container( + padding: EdgeInsets.only(top: 16.sp), + alignment: Alignment.topCenter, + child: Text( + AppLocalizations.of(context).no_matched_seasonal_recipe, + style: context.bL!.copyWith(color: context.inversePrimary), + ), + ), + ); + } + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).seasonal_recipe, + ), + body: Stack( + alignment: Alignment.topCenter, + children: [ + SafeArea( + bottom: false, + child: ListView(children: children), + ), + ], + ), + ), + ); + } +} diff --git a/lib/Page/Service/course_page.dart b/lib/Page/Service/course_page.dart new file mode 100644 index 0000000..b081f12 --- /dev/null +++ b/lib/Page/Service/course_page.dart @@ -0,0 +1,179 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Service/course.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/Button/my_text_button.dart'; +import 'package:lamiter/Component/Service/service_items_filter.dart'; +import 'package:lamiter/Component/refresh_indicator.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/Service/course_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class CoursePage extends StatefulWidget { + final Diagnosis? diagnosis; + + const CoursePage({ + super.key, + this.diagnosis, + }); + + @override + State createState() => _CoursePageState(); +} + +class _CoursePageState extends State { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().start(context, widget.diagnosis); + }); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).course, + shadowColor: Colors.transparent, + ), + body: Stack( + alignment: Alignment.topCenter, + children: [ + SafeArea( + bottom: false, + child: Column( + children: [ + const ServiceItemsFilter(), + _CourseListLayout(), + ], + ), + ), + ], + ), + ), + ); + } +} + +class _CourseListLayout extends StatelessWidget { + @override + Widget build(BuildContext context) { + final List courses = context.select>( + (provider) => provider.filtedList!.map((e) => e as Course).toList()); + + return Expanded( + child: MyRefreshIndicator( + onRefresh: () async {}, + children: courses.isEmpty + ? [ + Container( + padding: EdgeInsets.only(top: 16.sp), + alignment: Alignment.topCenter, + child: Text( + AppLocalizations.of(context).no_related_course, + style: context.bL!.copyWith(color: context.inversePrimary), + ), + ) + ] + : [ + SizedBox( + width: context.width(1), + child: Column( + children: List.generate( + courses.length, + (index) { + return _CourseUnitLayout( + index: index, + course: courses[index], + ); + }, + ) + .separator(SizedBox( + height: 54.sp, + )) + .toList(), + ), + ), + ], + ), + ); + } +} + +class _CourseUnitLayout extends StatelessWidget { + final int index; + final Course course; + + const _CourseUnitLayout({ + required this.index, + required this.course, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + return Column( + children: [ + Container( + width: context.width(1), + height: context.width(1), + alignment: Alignment.bottomCenter, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.cover, + image: MemoryImage(base64Decode(course.image)), + ), + ), + ), + Column( + children: [ + Container( + width: context.width(1), + padding: EdgeInsets.symmetric(horizontal: 27.sp), + child: Text( + languageProvider.getLocaleString(course.name), + style: TextStyle( + fontSize: 13.sp, + fontWeight: FontWeight.bold, + color: context.inverseSurface.withOpacity(0.75), + ), + textAlign: TextAlign.justify, + ), + ), + Container( + width: context.width(1), + padding: EdgeInsets.symmetric(horizontal: 27.sp), + child: Text( + languageProvider.getLocaleString(course.description), + style: TextStyle( + fontSize: 13.sp, + fontWeight: FontWeight.normal, + color: context.inverseSurface.withOpacity(0.85), + ), + textAlign: TextAlign.justify, + ), + ), + ].separator(SizedBox(height: 6.sp)).toList(), + ), + MyTextButton( + width: context.width(0.4), + height: 36.sp, + text: AppLocalizations.of(context).sign_up_now, + fontSize: 13.sp, + enabled: true, + ), + ] + .firstPadding(EdgeInsets.only(bottom: 3.sp)) + .separator(SizedBox(height: 18.sp)) + .toList(), + ); + } +} diff --git a/lib/Page/Service/product_page.dart b/lib/Page/Service/product_page.dart new file mode 100644 index 0000000..f9a47c9 --- /dev/null +++ b/lib/Page/Service/product_page.dart @@ -0,0 +1,168 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Service/product.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/Service/service_items_filter.dart'; +import 'package:lamiter/Component/refresh_indicator.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/Service/product_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ProductPage extends StatefulWidget { + final Diagnosis? diagnosis; + + const ProductPage({ + super.key, + this.diagnosis, + }); + + @override + State createState() => _ProductPageState(); +} + +class _ProductPageState extends State { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().start(context, widget.diagnosis); + }); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).product, + shadowColor: Colors.transparent, + ), + body: Stack( + alignment: Alignment.topCenter, + children: [ + SafeArea( + bottom: false, + child: Column( + children: [ + const ServiceItemsFilter(), + _ProductListLayout(), + ], + ), + ), + ], + ), + ), + ); + } +} + +class _ProductListLayout extends StatelessWidget { + @override + Widget build(BuildContext context) { + final List companiesProducts = + context.select>((provider) => + provider.filtedList!.map((e) => e as Product).toList()); + + return Expanded( + child: MyRefreshIndicator( + onRefresh: () async {}, + children: companiesProducts.isEmpty + ? [ + Container( + padding: EdgeInsets.only(top: 16.sp), + alignment: Alignment.topCenter, + child: Text( + AppLocalizations.of(context).no_related_product, + style: context.bL!.copyWith(color: context.inversePrimary), + ), + ) + ] + : [ + SizedBox( + width: context.width(1), + child: Wrap( + children: + List.generate(companiesProducts.length, (index) { + return _ProductUnitLayout( + index: index, + product: companiesProducts[index], + ); + })), + ), + ], + ), + ); + } +} + +class _ProductUnitLayout extends StatelessWidget { + final int index; + final Product product; + + const _ProductUnitLayout({ + required this.index, + required this.product, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + return Column( + children: [ + Container( + width: context.width(0.5), + height: context.width(0.5 * 4 / 3), + alignment: Alignment.bottomCenter, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.cover, + image: MemoryImage(base64Decode(product.image)), + ), + ), + ), + Container( + width: context.width(0.5), + padding: EdgeInsets.symmetric(horizontal: 6.sp), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + languageProvider.getLocaleString(product.productCategoryName), + style: context.lS), + Row( + children: [ + Text('◉ ', style: TextStyle(fontSize: 7.sp)), + Text(languageProvider.getLocaleString(product.companyName), + style: context.lS), + ], + ), + ], + ), + ), + Container( + width: context.width(0.5), + padding: EdgeInsets.symmetric(horizontal: 6.sp), + child: Text( + languageProvider.getLocaleString(product.name), + style: TextStyle(fontSize: 13.sp, fontWeight: FontWeight.w700), + ), + ), + Container( + width: context.width(0.5), + padding: EdgeInsets.symmetric(horizontal: 6.sp), + child: Text('CN¥ ${product.price.toString()}', style: context.lL), + ), + ] + .firstPadding(EdgeInsets.only(bottom: 6.sp)) + .lastPadding(EdgeInsets.only(bottom: 18.sp)) + .separator(SizedBox(height: 3.sp)) + .toList(), + ); + } +} diff --git a/lib/Page/Service/service_page.dart b/lib/Page/Service/service_page.dart new file mode 100644 index 0000000..12bd932 --- /dev/null +++ b/lib/Page/Service/service_page.dart @@ -0,0 +1,280 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/tap_container.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Page/Service/MedicalFacility/medical_facility_page.dart'; +import 'package:lamiter/Page/Service/MeridianNetwork/meridian_network_page.dart'; +import 'package:lamiter/Page/Service/course_page.dart'; +import 'package:lamiter/Page/Service/product_page.dart'; +import 'package:lamiter/Page/Service/SeasonalRecipe/seasonal_recipe_page.dart'; +import 'package:lamiter/Page/Service/treatment_page.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:lamiter/Page/create_edit_client_page.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/User/Client/client_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; + +class ServicePage extends StatelessWidget { + final Diagnosis diagnosis; + + const ServicePage({ + super.key, + required this.diagnosis, + }); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Stack( + alignment: Alignment.bottomCenter, + children: [ + Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).service, + actions: [ + Padding( + padding: EdgeInsets.only(right: 16.sp), + child: GestureDetector( + onTap: () async { + final client = context.read().self; + var diagnosis = + context.read().diagnosis; + if (client == null && diagnosis != null) { + var flag = false; + await showCupertinoDialog( + context: context, + builder: (BuildContext context) => + CupertinoAlertDialog( + content: Text('總評報告尚未保存。是否要創建新的客戶保存總評報告?'), + actions: [ + CupertinoDialogAction( + /// This parameter indicates this action is the default, + /// and turns the action's text to bold text. + isDefaultAction: true, + onPressed: () async { + flag = true; + Navigator.pop(context); + }, + child: const Text('是'), + ), + CupertinoDialogAction( + /// This parameter indicates the action would perform + /// a destructive action such as deletion, and turns + /// the action's text color to red. + isDestructiveAction: true, + onPressed: () { + Navigator.pop(context); + }, + child: const Text('否'), + ), + ], + ), + ); + if (flag) { + final clientId = await Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + const CreateEditClientPage()), + ); + if (clientId != null) { + diagnosis.clientId = clientId; + diagnosis.endTime = DateTime.now(); + await API().create_diagnosis(diagnosis); + } + } + } + Navigator.pop(context); + Navigator.pop(context); + context.read().refresh(); + }, + child: const Icon(Icons.close, size: 30), + ), + ) + ], + ), + body: SafeArea( + bottom: false, + child: Stack( + alignment: Alignment.center, + children: [ + ListView( + children: [ + _ServiceListLayout( + title: AppLocalizations.of(context).fundamental_care, + items: [ + _ServiceUnitLayout( + title: + AppLocalizations.of(context).meridian_network, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + MeridianNetworkPage(diagnosis: diagnosis), + ), + ); + }, + ), + _ServiceUnitLayout( + title: AppLocalizations.of(context).seasonal_recipe, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + SeasonalRecipePage(diagnosis: diagnosis), + ), + ); + }, + ), + ], + // note: + // '基本調理提供「療程」、「經絡穴位」與「節氣食譜」,量身推薦專屬選擇,幫助進一步調理身體,維持健康與活力。', + ), + _ServiceListLayout( + title: AppLocalizations.of(context).service_item, + items: [ + _ServiceUnitLayout( + title: AppLocalizations.of(context).product, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + ProductPage(diagnosis: diagnosis), + ), + ); + }, + ), + _ServiceUnitLayout( + title: AppLocalizations.of(context).treatment, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + TreatmentPage(diagnosis: diagnosis), + ), + ); + }, + ), + _ServiceUnitLayout( + title: AppLocalizations.of(context).course, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + CoursePage(diagnosis: diagnosis), + ), + ); + }, + ), + ], + // note: '配對產品提供「商品」,透過更進階的康養方案,幫助改善亞健康狀態,提升整體健康水平。', + ), + _ServiceListLayout( + title: AppLocalizations.of(context).healthcare_resource, + items: [ + _ServiceUnitLayout( + title: AppLocalizations.of(context).hospital_link, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + const MedicalFacilityPage(), + ), + ); + }, + ), + ], + // note: '醫療資源提供「院所鏈接」,協助快速聯繫專業的醫療機構,獲得專業的醫療建議與支持。', + ), + ] + .lastPadding( + EdgeInsets.only(bottom: context.height(0.1))) + .toList(), + ), + ], + ), + ), + ), + ], + ), + ); + } +} + +class _ServiceListLayout extends StatelessWidget { + final String title; + final List items; + final String? note; + + const _ServiceListLayout({ + required this.title, + required this.items, + this.note, + }); + + @override + Widget build(BuildContext context) { + return CupertinoFormSection( + backgroundColor: context.surface, + header: Text(title), + footer: note != null + ? Padding( + padding: EdgeInsets.only(top: 12.sp), + child: Text(note!, textAlign: TextAlign.justify), + ) + : const SizedBox.shrink(), + children: items, + ); + } +} + +class _ServiceUnitLayout extends StatelessWidget { + final String title; + final Function()? onTap; + + const _ServiceUnitLayout({ + required this.title, + this.onTap, + }); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + children: [ + TapContainer( + onTap: onTap, + child: CupertinoFormRow( + padding: EdgeInsets.all(16.sp), + prefix: Text( + title, + style: TextStyle( + fontFamily: 'CupertinoSystemText', + inherit: false, + fontSize: 17.0, + fontWeight: FontWeight.w400, + textBaseline: TextBaseline.alphabetic, + color: context.inversePrimary, + ), + ), + child: Icon(CupertinoIcons.forward, color: context.primary), + ), + ), + ], + ), + ); + } +} diff --git a/lib/Page/Service/treatment_page.dart b/lib/Page/Service/treatment_page.dart new file mode 100644 index 0000000..9e78a04 --- /dev/null +++ b/lib/Page/Service/treatment_page.dart @@ -0,0 +1,184 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Service/treatment.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/Button/my_text_button.dart'; +import 'package:lamiter/Component/Service/service_items_filter.dart'; +import 'package:lamiter/Component/refresh_indicator.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/Service/treatment_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class TreatmentPage extends StatefulWidget { + final Diagnosis? diagnosis; + + const TreatmentPage({ + super.key, + this.diagnosis, + }); + + @override + State createState() => _TreatmentPageState(); +} + +class _TreatmentPageState extends State { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().start(context, widget.diagnosis); + }); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: TitleAppBar( + title: AppLocalizations.of(context).treatment, + shadowColor: Colors.transparent, + ), + body: Stack( + alignment: Alignment.topCenter, + children: [ + SafeArea( + bottom: false, + child: Column( + children: [ + const ServiceItemsFilter(), + _TreatmentListLayout(), + ], + ), + ), + ], + ), + ), + ); + } +} + +class _TreatmentListLayout extends StatelessWidget { + @override + Widget build(BuildContext context) { + final List companiesTreatments = + context.select>((provider) => + provider.filtedList!.map((e) => e as Treatment).toList()); + + return Expanded( + child: MyRefreshIndicator( + onRefresh: () async {}, + children: companiesTreatments.isEmpty + ? [ + Container( + padding: EdgeInsets.only(top: 16.sp), + alignment: Alignment.topCenter, + child: Text( + AppLocalizations.of(context).no_related_treatment, + style: context.bL!.copyWith(color: context.inversePrimary), + ), + ) + ] + : [ + SizedBox( + width: context.width(1), + child: Column( + children: List.generate( + companiesTreatments.length, + (index) { + return _TreatmentUnitLayout( + index: index, + companyName: companiesTreatments[index].companyName, + treatment: companiesTreatments[index], + ); + }, + ) + .separator(SizedBox( + height: 54.sp, + )) + .toList(), + ), + ), + ], + ), + ); + } +} + +class _TreatmentUnitLayout extends StatelessWidget { + final int index; + final String companyName; + final Treatment treatment; + + const _TreatmentUnitLayout({ + required this.index, + required this.companyName, + required this.treatment, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + return Column( + children: [ + Container( + width: context.width(1), + height: context.width(1), + alignment: Alignment.bottomCenter, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.cover, + image: MemoryImage(base64Decode(treatment.image)), + ), + ), + ), + Column( + children: [ + Container( + width: context.width(1), + padding: EdgeInsets.symmetric(horizontal: 27.sp), + child: Text( + languageProvider.getLocaleString(treatment.name), + style: TextStyle( + fontSize: 13.sp, + fontWeight: FontWeight.bold, + color: context.inverseSurface.withOpacity(0.75), + ), + textAlign: TextAlign.justify, + ), + ), + Container( + width: context.width(1), + padding: EdgeInsets.symmetric(horizontal: 27.sp), + child: Text( + languageProvider.getLocaleString(treatment.description), + style: TextStyle( + fontSize: 13.sp, + fontWeight: FontWeight.normal, + color: context.inverseSurface.withOpacity(0.85), + ), + textAlign: TextAlign.justify, + ), + ), + ].separator(SizedBox(height: 6.sp)).toList(), + ), + MyTextButton( + width: context.width(0.4), + height: 36.sp, + text: AppLocalizations.of(context).sign_up_now, + fontSize: 13.sp, + enabled: true, + ), + ] + .firstPadding(EdgeInsets.only(bottom: 3.sp)) + .separator(SizedBox(height: 18.sp)) + .toList(), + ); + } +} diff --git a/lib/Page/User/Client/client_home_page.dart b/lib/Page/User/Client/client_home_page.dart new file mode 100644 index 0000000..7339753 --- /dev/null +++ b/lib/Page/User/Client/client_home_page.dart @@ -0,0 +1,1126 @@ +import 'package:bounce/bounce.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Component/circle_avator.dart'; +import 'package:lamiter/Component/refresh_indicator.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_compare_report_page.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_report_page.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_trend_report_page.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/User/Client/client_calendar_provider.dart'; +import 'package:lamiter/Provider/User/Client/client_provider.dart'; +import 'package:lamiter/extension/build_context.dart'; +import 'package:lamiter/extension/iterable.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ClientHomePage extends StatelessWidget { + const ClientHomePage({super.key}); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + _ClientInfo(), + const _ClientCalendar(), + ], + ), + ); + } +} + +class _ClientInfo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(16.sp), + decoration: BoxDecoration( + color: context.surface, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + spreadRadius: 1, + blurRadius: 3, + offset: const Offset(0, 1), // changes position of shadow + ), + ], + ), + child: Row( + children: [ + Padding( + padding: EdgeInsets.only(right: 16.sp), + child: const _ClientAvatar(), + ), + Expanded( + child: SizedBox( + height: 120.sp, + child: Column( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: const [ + _ClientName(), + _ClientBirthdayAndGender(), + _ClientNote(), + ] + .separator(SizedBox( + height: 9.sp, + )) + .toList(), + ), + ), + ), + ], + ), + ); + } +} + +class _ClientAvatar extends StatelessWidget { + const _ClientAvatar(); + + @override + Widget build(BuildContext context) { + final photo = + context.select((provider) => provider.photo); + final gender = + context.select((provider) => provider.gender); + + return MyCircleAvator( + name: '', + gender: gender, + photo: photo, + radius: context.width(0.17), + ); + } +} + +class _ClientName extends StatelessWidget { + const _ClientName(); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + final name = + context.select((provider) => provider.name); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppLocalizations.of(context).name, + style: context.lS!.copyWith(color: context.primary), + ), + Text( + languageProvider.getLocaleString(name), + style: TextStyle( + fontSize: 16.sp, + letterSpacing: 2, + fontWeight: FontWeight.bold, + ), + ), + ], + ); + } +} + +class _ClientBirthdayAndGender extends StatelessWidget { + const _ClientBirthdayAndGender(); + + @override + Widget build(BuildContext context) { + final birthday = context + .select((provider) => provider.birthday); + + final gender = + context.select((provider) => provider.gender); + + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppLocalizations.of(context).birthday, + style: context.lS!.copyWith(color: context.primary), + ), + Text( + birthday != null + ? '${birthday.year}/${birthday.month}/${birthday.day}' + : '', + style: context.lL!.copyWith( + fontSize: 12.sp, + color: context.inverseSurface.withOpacity(0.75), + letterSpacing: 0.5.sp), + ), + ], + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppLocalizations.of(context).gender, + style: context.lS!.copyWith(color: context.primary), + ), + Icon( + gender != null + ? gender + ? Icons.male + : Icons.female + : Icons.male, + color: gender != null + ? gender + ? CupertinoColors.activeBlue + : CupertinoColors.destructiveRed + : CupertinoColors.activeBlue, + size: 14.sp, + ), + ], + ), + ].firstPadding(EdgeInsets.only(right: 32.sp)).toList(), + ); + } +} + +class _ClientNote extends StatelessWidget { + const _ClientNote(); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + final note = + context.select((provider) => provider.note); + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppLocalizations.of(context).special_note, + style: context.lS!.copyWith(color: context.primary), + overflow: TextOverflow.ellipsis, + ), + Text( + languageProvider.getLocaleString(note ?? ''), + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: context.lS, + ) + ], + ); + } +} + +class _ClientCalendar extends StatefulWidget { + const _ClientCalendar(); + + @override + State<_ClientCalendar> createState() => _ClientCalendarState(); +} + +class _ClientCalendarState extends State<_ClientCalendar> + with SingleTickerProviderStateMixin { + late TabController _controller; + + @override + void initState() { + super.initState(); + _controller = TabController(length: 3, vsync: this); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Expanded( + child: Column( + children: [ + TabBar( + controller: _controller, + indicatorColor: context.inverseSurface, + dividerColor: Colors.transparent, + overlayColor: WidgetStateColor.transparent, + unselectedLabelColor: context.primary, + labelColor: context.inverseSurface, + isScrollable: false, + tabs: const [ + Icon(Icons.history_rounded), + Icon(Icons.compare_rounded), + Icon(Icons.trending_up_rounded), + ] + .padding( + EdgeInsets.symmetric(vertical: 6.sp, horizontal: 32.sp)) + .toList(), + ), + _WeekDayBar(), + Expanded( + child: TabBarView( + controller: _controller, + physics: const NeverScrollableScrollPhysics(), + children: [ + _HistoryCalendar(), + _ComapreCalendar(), + _TrendCalendar(), + ], + ), + ), + ], + ), + ); + } +} + +class _WeekDayBar extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Column( + children: [ + Container( + padding: EdgeInsets.only(top: 12.sp, left: 16.sp, right: 16.sp), + child: Row( + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + fit: FlexFit.tight, + flex: 1, + child: Center(child: Text('日', style: context.lS))), + Flexible( + fit: FlexFit.tight, + flex: 1, + child: Center(child: Text('一', style: context.lS))), + Flexible( + fit: FlexFit.tight, + flex: 1, + child: Center(child: Text('二', style: context.lS))), + Flexible( + fit: FlexFit.tight, + flex: 1, + child: Center(child: Text('三', style: context.lS))), + Flexible( + fit: FlexFit.tight, + flex: 1, + child: Center(child: Text('四', style: context.lS))), + Flexible( + fit: FlexFit.tight, + flex: 1, + child: Center(child: Text('五', style: context.lS))), + Flexible( + fit: FlexFit.tight, + flex: 1, + child: Center(child: Text('六', style: context.lS))), + ], + ), + ), + Container(height: 0.5.sp, color: context.primary), + ], + ); + } +} + +class _HistoryCalendar extends StatelessWidget { + @override + Widget build(BuildContext context) { + final selectedDate = context.select( + (provider) => provider.historySelectedDate, + ); + final diagnoses = context.select>( + (provider) => provider.findDiagnosesWithDate(selectedDate), + ); + final selectedDiagnosis = + context.select( + (provider) => provider.historyDiagnosis, + ); + + return SafeArea( + child: Stack( + children: [ + Column( + children: [ + const _CalendarWeekListLayout(type: ClientCalendarType.history), + Expanded( + child: MyRefreshIndicator( + onRefresh: context.read().refresh, + children: diagnoses.isEmpty + ? [ + _EmptyDiagnosisHistoryLayout(), + ] + .padding(EdgeInsets.symmetric(vertical: 16.sp)) + .toList() + : diagnoses + .map( + (diagnosis) => _DiagnosisUnitLayout( + diagnosis: diagnosis, + type: ClientCalendarType.history, + ), + ) + .firstPadding(EdgeInsets.only(top: 12.sp)) + .lastPadding(EdgeInsets.only(bottom: 12.sp)) + .padding(EdgeInsets.symmetric(horizontal: 16.sp)) + .separator(SizedBox(height: 12.sp)) + .toList(), + ), + ), + ], + ), + (diagnoses.isNotEmpty) + ? Opacity( + opacity: selectedDiagnosis != null ? 1 : 0.25, + child: Padding( + padding: EdgeInsets.all(32.sp), + child: Align( + alignment: Alignment.bottomRight, + child: Bounce( + onTap: () { + if (selectedDiagnosis == null) return; + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisReportPage( + diagnosis: selectedDiagnosis, + ), + ), + ); + }, + child: Container( + padding: EdgeInsets.all(12.sp), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: context.inverseSurface, + ), + child: Icon( + Icons.arrow_forward_ios_sharp, + color: context.surface, + ), + ), + ), + ), + ), + ) + : const SizedBox.shrink(), + ], + ), + ); + } +} + +class _ComapreCalendar extends StatelessWidget { + @override + Widget build(BuildContext context) { + final selectedDates = + context.select>( + (provider) => provider.compareSelectedDates, + ); + + List> diagnoses = [[], []]; + diagnoses[0] = context.select>( + (provider) => provider.findDiagnosesWithDate(selectedDates[0]), + ); + diagnoses[1] = context.select>( + (provider) => provider.findDiagnosesWithDate(selectedDates[1]), + ); + + List selectedDiagnoses = [null, null]; + selectedDiagnoses[0] = context.select( + (provider) => provider.compareDiagnoses[0], + ); + selectedDiagnoses[1] = context.select( + (provider) => provider.compareDiagnoses[1], + ); + + return SafeArea( + child: Stack( + children: [ + Column( + children: [ + const _CalendarWeekListLayout( + type: ClientCalendarType.compare, + index: 0, + ), + Expanded( + child: MyRefreshIndicator( + onRefresh: context.read().refresh, + children: diagnoses.isEmpty + ? [ + _EmptyDiagnosisHistoryLayout(), + ] + .padding(EdgeInsets.symmetric(vertical: 16.sp)) + .toList() + : diagnoses[0] + .map( + (diagnosis) => _DiagnosisUnitLayout( + diagnosis: diagnosis, + type: ClientCalendarType.compare, + index: 0, + ), + ) + .firstPadding(EdgeInsets.only(top: 12.sp)) + .lastPadding(EdgeInsets.only(bottom: 12.sp)) + .padding(EdgeInsets.symmetric(horizontal: 16.sp)) + .separator(SizedBox(height: 12.sp)) + .toList(), + ), + ), + const _CalendarWeekListLayout( + type: ClientCalendarType.compare, + index: 1, + ), + Expanded( + child: MyRefreshIndicator( + onRefresh: context.read().refresh, + children: diagnoses.isEmpty + ? [ + _EmptyDiagnosisHistoryLayout(), + ] + .padding(EdgeInsets.symmetric(vertical: 16.sp)) + .toList() + : diagnoses[1] + .map( + (diagnosis) => _DiagnosisUnitLayout( + diagnosis: diagnosis, + type: ClientCalendarType.compare, + index: 1, + ), + ) + .firstPadding(EdgeInsets.only(top: 12.sp)) + .lastPadding(EdgeInsets.only(bottom: 12.sp)) + .padding(EdgeInsets.symmetric(horizontal: 16.sp)) + .separator(SizedBox(height: 12.sp)) + .toList(), + ), + ), + ], + ), + (diagnoses[0].isNotEmpty && diagnoses[1].isNotEmpty) + ? Opacity( + opacity: (selectedDiagnoses[0] != null && + selectedDiagnoses[1] != null) + ? 1 + : 0.25, + child: Padding( + padding: EdgeInsets.all(32.sp), + child: Align( + alignment: Alignment.bottomRight, + child: Bounce( + onTap: () { + if (selectedDiagnoses[0] == null || + selectedDiagnoses[1] == null) return; + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisCompareReportPage( + firstDiagnosis: selectedDiagnoses[0]!, + secondDiagnosis: selectedDiagnoses[1]!, + ), + ), + ); + }, + child: Container( + padding: EdgeInsets.all(12.sp), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: context.inverseSurface, + ), + child: Icon( + Icons.arrow_forward_ios_sharp, + color: context.surface, + ), + ), + ), + ), + ), + ) + : const SizedBox.shrink(), + ], + ), + ); + } +} + +class _TrendCalendar extends StatelessWidget { + @override + Widget build(BuildContext context) { + List selectedDates = [null, null]; + selectedDates[0] = context.select( + (provider) => provider.trendSelectedDates[0], + ); + selectedDates[1] = context.select( + (provider) => provider.trendSelectedDates[1], + ); + + return SafeArea( + child: Stack( + children: [ + const _CalendarMonthListLayout(type: ClientCalendarType.trend), + Opacity( + opacity: (selectedDates[0] != null && selectedDates[1] != null) + ? 1 + : 0.25, + child: Padding( + padding: EdgeInsets.all(32.sp), + child: Align( + alignment: Alignment.bottomRight, + child: Bounce( + onTap: () { + if (selectedDates[0] == null || selectedDates[1] == null) { + return; + } + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => DiagnosisTrendReportPage( + fromDateTime: selectedDates[0]!, + toDateTime: selectedDates[1]!, + ), + ), + ); + }, + child: Container( + padding: EdgeInsets.all(12.sp), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: context.inverseSurface, + ), + child: Icon( + Icons.arrow_forward_ios_sharp, + color: context.surface, + ), + ), + ), + ), + ), + ) + ], + ), + ); + } +} + +class _CalendarWeekListLayout extends StatefulWidget { + final ClientCalendarType type; + final int? index; + + const _CalendarWeekListLayout({ + required this.type, + this.index, + }); + + @override + State<_CalendarWeekListLayout> createState() => + _CalendarWeekListLayoutState(); +} + +class _CalendarWeekListLayoutState extends State<_CalendarWeekListLayout> + with AutomaticKeepAliveClientMixin { + late DateTime _firstDayOfWeek; + late _CalendarWeekUnitLayout _week; + + @override + void initState() { + super.initState(); + DateTime now = DateTime.now(); + DateTime today = DateTime(now.year, now.month, now.day); + _firstDayOfWeek = today.subtract(Duration(days: today.weekday % 7)); + drawWeek(_firstDayOfWeek); + setState(() {}); + } + + void drawWeek(DateTime firstDayOfWeek) { + List<_CalendarDayUnitLayout> days = []; + for (int d = 0; d < 7; d++) { + days.add( + _CalendarDayUnitLayout( + date: _firstDayOfWeek.add(Duration(days: d)), + monthVisible: d == 0, + type: widget.type, + index: widget.index, + ), + ); + } + _week = _CalendarWeekUnitLayout( + days: days, + type: widget.type, + index: widget.index, + ); + } + + @override + Widget build(BuildContext context) { + super.build(context); + return Stack( + children: [ + Column( + children: [_week, Container(height: 0.2.sp, color: context.primary)], + ), + Container( + padding: EdgeInsets.only(top: 16.sp), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Bounce( + onTap: () { + _firstDayOfWeek = + _firstDayOfWeek.subtract(const Duration(days: 7)); + drawWeek(_firstDayOfWeek); + setState(() {}); + }, + child: const Icon(Icons.keyboard_arrow_left), + ), + (_firstDayOfWeek + .add(const Duration(days: 6)) + .compareTo(DateTime.now()) < + 0) + ? Bounce( + onTap: () { + _firstDayOfWeek = + _firstDayOfWeek.add(const Duration(days: 7)); + drawWeek(_firstDayOfWeek); + setState(() {}); + }, + child: const Icon(Icons.keyboard_arrow_right), + ) + : const SizedBox.shrink(), + ], + ), + ) + ], + ); + } + + @override + bool get wantKeepAlive => true; +} + +class _CalendarMonthListLayout extends StatefulWidget { + final ClientCalendarType type; + + const _CalendarMonthListLayout({ + required this.type, + }); + + @override + State<_CalendarMonthListLayout> createState() => + _CalendarMonthListLayoutState(); +} + +class _CalendarMonthListLayoutState extends State<_CalendarMonthListLayout> + with AutomaticKeepAliveClientMixin { + late DateTime _month; + late List<_CalendarWeekUnitLayout> _weeks; + + @override + void initState() { + super.initState(); + DateTime now = DateTime.now(); + _month = DateTime(now.year, now.month, 1); + _weeks = []; + drawMonth(_month); + setState(() {}); + } + + void drawMonth(DateTime firstDayOfMonth) { + int firstDayOffset = firstDayOfMonth.weekday % 7; + int totalDays = + DateTime(firstDayOfMonth.year, firstDayOfMonth.month + 1, 0).day + + firstDayOffset; + int totalWeeks = (totalDays / 7).ceil(); + DateTime firstDayOfCalendar = + firstDayOfMonth.subtract(Duration(days: firstDayOffset)); + _weeks = []; + for (int i = 0; i < totalWeeks; i++) { + List<_CalendarDayUnitLayout> days = []; + for (int d = 0; d < 7; d++) { + days.add( + _CalendarDayUnitLayout( + date: firstDayOfCalendar.add(Duration(days: d + i * 7)), + type: widget.type, + ), + ); + } + _weeks.add(_CalendarWeekUnitLayout(days: days, type: widget.type)); + } + } + + @override + Widget build(BuildContext context) { + super.build(context); + + DateTime now = DateTime.now(); + + return Stack( + children: [ + Column( + children: _weeks.map((week) { + return Column( + children: [ + week, + Container(height: 0.2.sp, color: context.primary), + ], + ); + }).toList(), + ), + Container( + padding: EdgeInsets.only(top: 16.sp), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Bounce( + onTap: () { + _month = DateTime(_month.year, _month.month - 1, 1); + drawMonth(_month); + setState(() {}); + }, + child: const Icon(Icons.keyboard_arrow_left), + ), + (_month.year != now.year || _month.month != now.month) + ? Bounce( + onTap: () { + _month = DateTime(_month.year, _month.month + 1, 1); + drawMonth(_month); + setState(() {}); + }, + child: const Icon(Icons.keyboard_arrow_right), + ) + : const SizedBox.shrink() + ], + ), + ) + ], + ); + } + + @override + bool get wantKeepAlive => true; +} + +class _CalendarWeekUnitLayout extends StatelessWidget { + final List<_CalendarDayUnitLayout> days; + final ClientCalendarType type; + final int? index; + + const _CalendarWeekUnitLayout({ + required this.days, + required this.type, + this.index, + }); + + void ensureListLength(List<_CalendarDayUnitLayout> list, int length) { + while (list.length < length) { + list.add(_CalendarDayUnitLayout( + type: type, + index: index, + )); // 添加 null 元素直到達到目標長度 + } + while (list.length > length) { + list.removeLast(); // 移除多餘元素 + } + } + + @override + Widget build(BuildContext context) { + ensureListLength(days, 7); + return Container( + width: context.width(1), + padding: EdgeInsets.symmetric(horizontal: 16.sp, vertical: 3.sp), + child: Row(mainAxisSize: MainAxisSize.max, children: days), + ); + } +} + +class _CalendarDayUnitLayout extends StatelessWidget { + final DateTime? date; + final bool monthVisible; + final ClientCalendarType type; + final int? index; + + const _CalendarDayUnitLayout({ + this.date, + this.monthVisible = false, + required this.type, + this.index, + }); + + String getChineseMonth() { + int month = date?.month ?? 0; + switch (month) { + case 1: + return '一月'; + case 2: + return '二月'; + case 3: + return '三月'; + case 4: + return '四月'; + case 5: + return '五月'; + case 6: + return '六月'; + case 7: + return '七月'; + case 8: + return '八月'; + case 9: + return '九月'; + case 10: + return '十月'; + case 11: + return '十一月'; + case 12: + return '十二月'; + } + return ''; + } + + bool isToday() { + DateTime today = DateTime.now(); + return today.year == date?.year && + today.month == date?.month && + today.day == date?.day; + } + + bool isFuture() { + if (date == null) return true; + if (isToday()) return false; + return DateTime.now().compareTo(date!) == -1; + } + + @override + Widget build(BuildContext context) { + final selected = context.select( + (provider) => provider.isSelectedDate(date!, type, index: index), + ); + + Color selectedFontColor = context.surface; + Color unselectedFontColor = isToday() ? Colors.red : context.inverseSurface; + Color selectedBackgroundColor = + isToday() ? Colors.red : context.inverseSurface; + Color unselectedBackgroundColor = context.surface; + + bool hasDiagnoses = date != null && + context.select( + (provider) => provider.findDiagnosesWithDate(date!).isNotEmpty); + bool hasSelectedDiagnosis = date != null && + context.select((provider) => + provider.isDateHasSelectedDiagnosis(date!, type, index: index)); + + bool enabled = + !isFuture() && (hasDiagnoses || type == ClientCalendarType.trend); + + return Flexible( + fit: FlexFit.tight, + flex: 1, + child: Opacity( + opacity: enabled ? 1 : 0.25, + child: GestureDetector( + onTapDown: (details) { + if (date == null || !enabled) return; + context.read().selectDate( + date!, + type, + index: index, + ); + }, + child: Center( + child: Column( + children: [ + Container( + width: 36.sp, + height: 36.sp, + decoration: BoxDecoration( + color: selected && (date != null) + ? selectedBackgroundColor + : unselectedBackgroundColor, + shape: BoxShape.circle, + ), + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + date?.day.toString() ?? '', + textAlign: TextAlign.center, + style: context.lM!.copyWith( + height: 1, + color: selected && (date != null) + ? selectedFontColor + : unselectedFontColor, + fontWeight: FontWeight.w700, + ), + ), + monthVisible || date?.day == 1 + ? Text( + getChineseMonth(), + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 8.sp, + color: selected && (date != null) + ? selectedFontColor + : unselectedFontColor, + fontWeight: FontWeight.w700, + ), + ) + : const SizedBox.shrink(), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.only(bottom: 2.sp), + child: Container( + width: 4.sp, + height: 4.sp, + decoration: BoxDecoration( + color: hasSelectedDiagnosis + ? selectedBackgroundColor + : Colors.transparent, + shape: BoxShape.circle, + ), + ), + ), + ].separator(SizedBox(height: 2.sp)).toList(), + ), + ), + ), + ), + ); + } +} + +class _DiagnosisUnitLayout extends StatelessWidget { + final Diagnosis diagnosis; + final ClientCalendarType type; + final int? index; + + const _DiagnosisUnitLayout({ + required this.type, + required this.diagnosis, + this.index, + }); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + + List tags = []; + if (diagnosis.hasReport(DiagnosisReportType.basicHealth)) { + tags.add(AppLocalizations.of(context).basic_health); + } + if (diagnosis.hasReport(DiagnosisReportType.constitution)) { + tags.add(AppLocalizations.of(context).constitution); + } + if (diagnosis.hasReport(DiagnosisReportType.postureIssue)) { + tags.add(AppLocalizations.of(context).posture_issue); + } + + return Bounce( + onTap: () { + context.read().selectDiagnosis( + diagnosis, + type, + index: index, + ); + }, + child: Opacity( + opacity: context.select( + (provider) => provider.isSelectedDiagnosis( + diagnosis, + type, + index: index, + )) + ? 1 + : 0.25, + child: Row( + children: [ + Row( + children: [ + Container( + height: 32.sp, + width: 2.sp, + decoration: BoxDecoration( + color: context.inverseSurface, + borderRadius: BorderRadius.circular(36.sp), + ), + ), + Padding( + padding: EdgeInsets.only(left: 12.sp), + child: Text( + languageProvider + .getLocaleString(diagnosis.managerName ?? ''), + style: context.lS!.copyWith(fontWeight: FontWeight.w700), + ), + ), + Padding( + padding: EdgeInsets.only(left: 12.sp), + child: Text( + '>', + style: context.lS!.copyWith(fontWeight: FontWeight.w700), + ), + ), + Padding( + padding: EdgeInsets.only(left: 12.sp), + child: Row( + children: [ + Row( + children: tags + .map( + (tag) => Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: context.inverseSurface), + ), + ), + child: Text( + tag, + style: context.lS!.copyWith( + fontWeight: FontWeight.bold, + color: context.inverseSurface, + ), + ), + ), + ) + .separator(SizedBox(width: 6.sp)) + .toList()), + ], + ), + ), + ], + ), + const Expanded(child: SizedBox()), + Text( + '${diagnosis.startTime.hour}:${diagnosis.startTime.minute.toString().padLeft(2, "0")}:${diagnosis.startTime.second.toString().padLeft(2, "0")}', + style: context.lS!.copyWith(color: context.inverseSurface), + ) + ], + ), + ), + ); + } +} + +class _EmptyDiagnosisHistoryLayout extends StatelessWidget { + @override + Widget build(BuildContext context) { + return SizedBox( + width: context.width(1), + child: Center( + child: Text( + AppLocalizations.of(context).no_diagnosis_report, + style: context.lM!.copyWith( + color: context.primary, + fontWeight: FontWeight.bold, + ), + ), + ), + ); + } +} diff --git a/lib/Page/User/Client/client_page.dart b/lib/Page/User/Client/client_page.dart new file mode 100644 index 0000000..21efead --- /dev/null +++ b/lib/Page/User/Client/client_page.dart @@ -0,0 +1,95 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/User/client.dart'; +import 'package:lamiter/Component/AppBar/client_app_bar.dart'; +import 'package:lamiter/Component/AppBar/lamiter_app_bar.dart'; +import 'package:lamiter/Component/BottomNavigationBar/client_bottom_navigation_bar.dart'; +import 'package:lamiter/Component/loading.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_page.dart'; +import 'package:lamiter/Page/User/Client/client_home_page.dart'; +import 'package:lamiter/Page/User/Client/client_profile_page.dart'; +import 'package:lamiter/Page/User/user_mall_page.dart'; +import 'package:lamiter/Provider/User/Client/client_calendar_provider.dart'; +import 'package:lamiter/Provider/User/Client/client_provider.dart'; +import 'package:provider/provider.dart'; + +class ClientPage extends StatefulWidget { + final Client client; + + const ClientPage({ + super.key, + required this.client, + }); + + @override + State createState() => _ClientPageState(); +} + +class _ClientPageState extends State { + int _index = 0; + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().start(widget.client); + context.read().start(widget.client, context); + }); + } + + @override + Widget build(BuildContext context) { + final loading = context + .select((provider) => provider.loading); + + return WillPopScope( + onWillPop: () async { + context.read().logout(context); + return false; + }, + child: GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Stack( + children: [ + Scaffold( + appBar: _index == 0 ? LamiterAppBar() : ClientAppBar(), + extendBody: true, + body: SafeArea( + bottom: false, + child: IndexedStack( + index: _index, + children: [ + const ClientHomePage(), + Container(), + Container(), + const UserMallPage(), + const ClientProfilePage(), + ], + ), + ), + bottomNavigationBar: ClientBottomNavigationBar( + currentIndex: _index, + onTap: (index) { + if (index == 1) return; // 學習資源保留欄位單無內容 + if (index == 2) { + index = 0; + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => const DiagnosisPage(), + ), + ); + } + setState(() { + _index = index; + }); + }, + ), + ), + loading ? const Loading() : const SizedBox.shrink(), + ], + ), + ), + ); + } +} diff --git a/lib/Page/User/Client/client_profile_page.dart b/lib/Page/User/Client/client_profile_page.dart new file mode 100644 index 0000000..816b7b0 --- /dev/null +++ b/lib/Page/User/Client/client_profile_page.dart @@ -0,0 +1,79 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/Profile/profile_footer.dart'; +import 'package:lamiter/Component/Profile/profile_form_row.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/User/Client/client_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +// todo 廠商帳號 + +class ClientProfilePage extends StatelessWidget { + const ClientProfilePage({super.key}); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + CupertinoFormSection( + backgroundColor: context.surface, + header: Text(AppLocalizations.of(context).client_profile), + footer: ProfileFooter( + text: AppLocalizations.of(context).client_profile_info), + children: [ + ProfileFormRow( + prefixText: AppLocalizations.of(context).edit_client_profile, + childIcon: CupertinoIcons.forward, + onTap: () => context.read().edit(context), + ), + ], + ), + CupertinoFormSection( + backgroundColor: context.surface, + footer: + ProfileFooter(text: AppLocalizations.of(context).sign_out_info), + children: [ + CupertinoActionSheetAction( + isDefaultAction: true, + onPressed: () { + context.read().logout(context); + }, + child: Text(AppLocalizations.of(context).sign_out), + ), + ], + ), + CupertinoFormSection( + backgroundColor: context.surface, + footer: ProfileFooter( + text: AppLocalizations.of(context).delete_account_info), + children: [ + CupertinoActionSheetAction( + isDestructiveAction: true, + onPressed: () { + Navigator.pop(context); + final client = context.read().self!; + context + .read() + .deleteClient(context, client.id!); + }, + child: Text(AppLocalizations.of(context).delete_account), + ), + ], + ), + ] + .separator( + SizedBox( + height: 12.sp, + ), + ) + .toList(), + ), + ); + } +} diff --git a/lib/Page/User/Manager/manager_home_page.dart b/lib/Page/User/Manager/manager_home_page.dart new file mode 100644 index 0000000..d4268ba --- /dev/null +++ b/lib/Page/User/Manager/manager_home_page.dart @@ -0,0 +1,366 @@ +import 'package:bounce/bounce.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/User/client.dart'; +import 'package:lamiter/Component/TextField/top_bar_text_field.dart'; +import 'package:lamiter/Component/circle_avator.dart'; +import 'package:lamiter/Component/refresh_indicator.dart'; +import 'package:lamiter/Component/tap_container.dart'; +import 'package:lamiter/Component/time_difference_display.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Page/User/Client/client_page.dart'; +import 'package:lamiter/Page/create_edit_client_page.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ManagerHomePage extends StatelessWidget { + const ManagerHomePage({super.key}); + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: EdgeInsets.only(top: 16.sp), + child: const _TopBar(), + ), + const _ClientLayout(), + ], + ), + _FloatingButton(), + ], + ); + } +} + +class _TopBar extends StatelessWidget { + const _TopBar(); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 16.sp), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TopBarTextField(onChanged: context.read().filt), + ], + ), + ); + } +} + +class _FloatingButton extends StatelessWidget { + @override + Widget build(BuildContext context) { + final clientNumber = context.select( + (provider) => provider.clients.length, + ); + final clientMaxNumber = context.select( + (provider) => provider.clientMaxNumber, + ); + final enabled = clientNumber < clientMaxNumber; + + return Opacity( + opacity: enabled ? 1 : 0.25, + child: Padding( + padding: EdgeInsets.all(32.sp), + child: Align( + alignment: Alignment.bottomRight, + child: Bounce( + onTap: () { + if (!enabled) return; + FocusManager.instance.primaryFocus?.unfocus(); + context.read().navigate( + context, + const CreateEditClientPage(), + ); + }, + child: Container( + padding: EdgeInsets.all(18.sp), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: context.inverseSurface, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(left: 3.sp), + child: Icon( + Icons.person_add_alt_1_rounded, + color: context.surface, + size: 23.sp, + ), + ), + SizedBox( + width: 40.sp, + child: Center( + child: Text( + '$clientNumber/${clientMaxNumber}', // todo max client amount + style: context.lS!.copyWith( + letterSpacing: 1.sp, + color: context.surface, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ].separator(SizedBox(height: 2.sp)).toList(), + ), + ), + ), + ), + ), + ); + } +} + +class _ClientLayout extends StatelessWidget { + const _ClientLayout(); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + final clients = context.select>( + (provider) => provider.filtedList!.map((e) => e as Client).toList(), + ); + + return Expanded( + child: MyRefreshIndicator( + onRefresh: context.read().refresh, + children: clients.isEmpty + ? [ + Container( + padding: EdgeInsets.only(top: 16.sp), + alignment: Alignment.topCenter, + child: Text( + AppLocalizations.of(context).clients_is_empty, + style: + context.tM!.copyWith(color: context.inversePrimary), + ), + ), + ] + : List.generate(ClientTagType.values.length, (index) { + List temp = clients + .where( + (client) => + client.tag == ClientTagType.values[index].index, + ) + .toList(); + if (temp.isEmpty) return const SizedBox.shrink(); + return Column( + children: [ + Stack( + alignment: Alignment.center, + children: [ + Divider( + thickness: 0.25, + color: context.inverseSurface.withOpacity(0.33), + indent: 9.sp, + endIndent: 9.sp, + ), + Center( + child: Container( + padding: EdgeInsets.symmetric(horizontal: 6.sp), + color: context.surface, + child: Text( + languageProvider.getLocaleString( + ClientTagType.values[index].name, + ), + style: index != 0 + ? context.tM!.copyWith( + color: context.inverseSurface + .withOpacity(0.5), + ) + : context.lM!.copyWith( + color: context.inverseSurface + .withOpacity(0.5), + ), + ), + ), + ), + ], + ), + _ClientListLayout( + clients: temp, + ) + ].firstPadding(EdgeInsets.only(top: 6.sp)).toList(), + ); + }) + // clients + // .map((client) => _ClientUnitLayout(client: client)) + // .separator( + // Divider( + // height: 6.sp, + // indent: 18.sp, + // endIndent: 18.sp, + // color: context.secondary, + // ), + // ) + // .firstPadding(EdgeInsets.only(top: 9.sp)) + // .toList(), + ), + ); + } +} + +class _ClientListLayout extends StatelessWidget { + final List clients; + + const _ClientListLayout({required this.clients}); + + @override + Widget build(BuildContext context) { + return Column( + children: clients + .map((client) => _ClientUnitLayout(client: client)) + .separator(SizedBox(height: 3.sp)) + .toList(), + ); + } +} + +class _ClientUnitLayout extends StatelessWidget { + final Client client; + + const _ClientUnitLayout({required this.client}); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + final double height = 48.sp; + + return Padding( + padding: EdgeInsets.symmetric(horizontal: 16.sp, vertical: 12.sp), + child: TapContainer( + onTap: () => context.read().navigate( + context, + ClientPage(client: client), + ), + child: Row( + children: [ + // Avatar + Padding( + padding: EdgeInsets.only(right: 12.sp), + child: MyCircleAvator( + name: client.name, + photo: client.photo, + gender: client.gender, + radius: height / 2, + actions: const [], + ), + ), + // Name and Note + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + languageProvider.getLocaleString(client.name), + style: context.tM!.copyWith( + color: context.inverseSurface.withOpacity(0.85), + fontWeight: FontWeight.w700, + letterSpacing: 2.sp, + ), + ), + Text( + languageProvider.getLocaleString(client.note ?? ''), + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: context.lS!.copyWith( + color: context.inverseSurface.withOpacity(0.5), + fontWeight: FontWeight.w500, + letterSpacing: 1.sp, + ), + ), + ], + ), + ), + // Actions and last update time + SizedBox( + height: height, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + _ClientActionsButton(client: client), + TimeDifferenceDisplay(time: client.lastUpdateTime!) + ], + ), + ), + ], + ), + ), + ); + } +} + +class _ClientActionsButton extends StatelessWidget { + final Client client; + + const _ClientActionsButton({required this.client}); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) => CupertinoActionSheet( + actions: [ + CupertinoActionSheetAction( + isDefaultAction: true, + onPressed: () { + Navigator.pop(context); + context.read().navigate( + context, + ClientPage(client: client), + ); + }, + child: + Text(AppLocalizations.of(context).enter_client_home_page), + ), + CupertinoActionSheetAction( + onPressed: () { + Navigator.pop(context); + context.read().navigate( + context, + CreateEditClientPage(client: client), + ); + }, + child: Text(AppLocalizations.of(context).edit_client_profile), + ), + CupertinoActionSheetAction( + isDestructiveAction: true, + onPressed: () { + Navigator.pop(context); + context + .read() + .deleteClient(context, client.id!); + }, + child: Text(AppLocalizations.of(context).delete_account), + ), + ], + cancelButton: CupertinoActionSheetAction( + isDefaultAction: true, + onPressed: () { + Navigator.pop(context); + }, + child: Text(AppLocalizations.of(context).cancel), + ), + ), + ); + }, + child: const Icon(Icons.more_horiz_rounded), + ); + } +} diff --git a/lib/Page/User/Manager/manager_page.dart b/lib/Page/User/Manager/manager_page.dart new file mode 100644 index 0000000..131e2a3 --- /dev/null +++ b/lib/Page/User/Manager/manager_page.dart @@ -0,0 +1,93 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/UsageTimer/usage_timer.dart'; +import 'package:lamiter/Class/User/manager.dart'; +import 'package:lamiter/Component/AppBar/manager_app_bar.dart'; +import 'package:lamiter/Component/BottomNavigationBar/manager_bottom_navigation_bar.dart'; +import 'package:lamiter/Page/User/Manager/manager_home_page.dart'; +import 'package:lamiter/Page/User/Manager/manager_profile_page.dart'; +import 'package:lamiter/Page/Diagnosis/diagnosis_page.dart'; +import 'package:lamiter/Page/User/user_mall_page.dart'; + +class ManagerPage extends StatefulWidget { + final Manager manager; + + const ManagerPage({ + super.key, + required this.manager, + }); + + @override + State createState() => _ManagerPageState(); +} + +class _ManagerPageState extends State with WidgetsBindingObserver { + int _index = 0; + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addObserver(this); + UsageTime.instance.start(); + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + if (state == AppLifecycleState.resumed) { + UsageTime.instance.start(); + } else if (state == AppLifecycleState.paused) { + UsageTime.instance.end(context); + } else if (state == AppLifecycleState.detached) { + UsageTime.instance.end(context); + } + } + + @override + void dispose() { + WidgetsBinding.instance.removeObserver(this); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + appBar: ManagerAppBar(), + extendBody: false, + body: SafeArea( + bottom: false, + child: IndexedStack( + index: _index, + children: [ + const ManagerHomePage(), + Container(), + Container(), + const UserMallPage(), + const ManagerProfilePage(), + // const ManagerProfilePage(), + ], + ), + ), + bottomNavigationBar: ManagerBottomNavigationBar( + currentIndex: _index, + onTap: (index) { + if (index == 1) return; // 學習資源保留欄位單無內容 + if (index == 2) { + index = 0; + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => const DiagnosisPage(), + ), + ); + } + setState(() { + _index = index; + }); + }, + ), + ), + ); + } +} diff --git a/lib/Page/User/Manager/manager_profile_page.dart b/lib/Page/User/Manager/manager_profile_page.dart new file mode 100644 index 0000000..8a3f3f2 --- /dev/null +++ b/lib/Page/User/Manager/manager_profile_page.dart @@ -0,0 +1,89 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/Profile/profile_footer.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class ManagerProfilePage extends StatelessWidget { + const ManagerProfilePage({super.key}); + + @override + Widget build(BuildContext context) { + final _languageBoolean = context.select( + (provider) => provider.locale == Locale('zh', 'TW')); + + TextStyle style = TextStyle( + fontFamily: 'CupertinoSystemText', + inherit: false, + fontSize: 17.0, + fontWeight: FontWeight.w400, + textBaseline: TextBaseline.alphabetic, + color: context.inversePrimary, + ); + + return Center( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + CupertinoFormSection( + backgroundColor: context.surface, + header: Text(AppLocalizations.of(context).display_language), + footer: ProfileFooter( + text: AppLocalizations.of(context).display_laguage_info), + children: [ + CupertinoFormRow( + padding: EdgeInsets.all(16.sp), + prefix: + Text(AppLocalizations.of(context).chinese, style: style), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text('简体', style: style), + CupertinoSwitch( + // This bool value toggles the switch. + value: _languageBoolean, + trackColor: context.primary, + activeColor: CupertinoColors.activeGreen, + onChanged: (bool value) { + if (value) { + context + .read() + .setLocale(Locale('zh', 'TW')); + } else { + context + .read() + .setLocale(Locale('zh')); + } + }, + ), + Text('繁體', style: style), + ].separator(SizedBox(width: 6.sp)).toList(), + ), + ), + ], + ), + CupertinoFormSection( + backgroundColor: context.surface, + header: Text(AppLocalizations.of(context).profile), + footer: + ProfileFooter(text: AppLocalizations.of(context).logout_info), + children: [ + CupertinoActionSheetAction( + isDefaultAction: true, + onPressed: () { + context.read().logout(context); + }, + child: Text(AppLocalizations.of(context).logout), + ), + ], + ), + ].separator(SizedBox(height: 12.sp)).toList(), + ), + ); + } +} diff --git a/lib/Page/User/user_mall_page.dart b/lib/Page/User/user_mall_page.dart new file mode 100644 index 0000000..d839203 --- /dev/null +++ b/lib/Page/User/user_mall_page.dart @@ -0,0 +1,61 @@ +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_row.dart'; +import 'package:lamiter/Component/CupertinoForm/cupertino_form_section.dart'; +import 'package:lamiter/Page/Service/course_page.dart'; +import 'package:lamiter/Page/Service/product_page.dart'; +import 'package:lamiter/Page/Service/treatment_page.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class UserMallPage extends StatelessWidget { + const UserMallPage({super.key}); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + MyCupertinoFormSection( + title: AppLocalizations.of(context).service_item, + items: [ + MyCupertinoFormRow( + title: AppLocalizations.of(context).product, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => const ProductPage(), + ), + ); + }, + ), + MyCupertinoFormRow( + title: AppLocalizations.of(context).treatment, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => const TreatmentPage(), + ), + ); + }, + ), + MyCupertinoFormRow( + title: AppLocalizations.of(context).course, + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => const CoursePage(), + ), + ); + }, + ), + ], + ), + ], + ), + ); + } +} diff --git a/lib/Page/create_edit_client_page.dart b/lib/Page/create_edit_client_page.dart new file mode 100644 index 0000000..76c5bd0 --- /dev/null +++ b/lib/Page/create_edit_client_page.dart @@ -0,0 +1,125 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Question/question.dart'; +import 'package:lamiter/Class/User/client.dart'; +import 'package:lamiter/Component/AppBar/title_app_bar.dart'; +import 'package:lamiter/Component/Button/submit_button.dart'; +import 'package:lamiter/Component/loading.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:lamiter/Extension/iterable.dart'; +import 'package:lamiter/Provider/Form/create_edit_client_form_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class CreateEditClientPage extends StatefulWidget { + final Client? client; + + const CreateEditClientPage({super.key, this.client}); + + @override + State createState() => _CreateClientPageState(); +} + +class _CreateClientPageState extends State { + final GlobalKey submitButtonKey = + GlobalKey(); + + Future success() async { + final manager = context.read().self; + final res = await API().get_clients(manager!.id!); + final clients = (res["success"] ?? []) + .map((json) => Client.fromJson(json)) + .toList(); + Navigator.pop(context, clients.isEmpty ? null : clients.first.id); + } + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().start(widget.client); + }); + } + + @override + Widget build(BuildContext context) { + final questions = + context.select>( + (provider) => provider.questions); + final enabled = context.select( + (provider) => provider.isReadyToSubmit()); + final submitting = context.select( + (provider) => provider.submitting); + final loading = context.select( + (provider) => provider.loading); + + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Stack( + alignment: Alignment.bottomCenter, + children: [ + Scaffold( + appBar: TitleAppBar( + title: widget.client == null + ? AppLocalizations.of(context).create_client + : AppLocalizations.of(context).edit_client_profile, + leading: GestureDetector( + onTap: () { + Navigator.pop(context, null); + }, + child: const Icon(Icons.arrow_back_ios_new), + ), + ), + body: SafeArea( + bottom: false, + child: Stack( + alignment: Alignment.center, + children: [ + ListView( + children: questions + .padding(EdgeInsets.symmetric(horizontal: 32.sp)) + .separator(SizedBox(height: 32.sp)) + .firstPadding(EdgeInsets.only(top: 16.sp)) + .lastPadding( + EdgeInsets.only(bottom: context.height(0.1))) + .toList(), + ), + ], + ), + ), + ), + SubmitButton( + key: submitButtonKey, + text: widget.client == null + ? AppLocalizations.of(context).submit + : AppLocalizations.of(context).save, + enabled: enabled, + submitting: submitting, + onTap: () async { + if (!context + .read() + .isReadyToSubmit()) { + return; + } + + Map response = await context + .read() + .submit(context, widget.client); + if (response.containsKey("success")) { + success(); + } else { + print(response["errorMessage"]); + // submitButtonKey.currentState + // ?.showMessage(PopupMessageType.serverError); + return; + } + }, + ), + loading ? const Loading() : const SizedBox.shrink(), + ], + ), + ); + } +} diff --git a/lib/Page/login_page.dart b/lib/Page/login_page.dart new file mode 100644 index 0000000..0ac3c49 --- /dev/null +++ b/lib/Page/login_page.dart @@ -0,0 +1,372 @@ +import 'dart:async'; +import 'dart:convert'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:lamiter/Component/Button/my_text_button.dart'; +import 'package:lamiter/Component/logo.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/image_and_logo_provider.dart'; +import 'package:lamiter/Provider/login_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Extension/build_context.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class LoginPage extends StatefulWidget { + const LoginPage({super.key}); + + @override + State createState() => _LoginPageState(); +} + +class _LoginPageState extends State { + final TextEditingController _accountController = TextEditingController(); + final TextEditingController _passwordController = TextEditingController(); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + context.read().init(); + final prefs = await SharedPreferences.getInstance(); + String? _account = prefs.getString('account'); + String? _password = prefs.getString('password'); + if (_account != null && _password != null) { + _accountController.text = _account; + _passwordController.text = _password; + context + .read() + .update(LoginProviderAttributes.account, _accountController.text); + context + .read() + .update(LoginProviderAttributes.password, _passwordController.text); + context + .read() + .update(LoginProviderAttributes.isAccountLegal, true); + + context + .read() + .update(LoginProviderAttributes.isPasswordLegal, true); + } + }); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + body: Stack( + children: [ + _BackgroundImage(), + SafeArea( + child: Container( + color: Colors.transparent, + alignment: Alignment.center, + padding: EdgeInsets.only(top: 36.sp), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Logo( + width: context.width(0.6), + color: Colors.white, + ), + Padding( + padding: EdgeInsets.only(top: 27.h), + child: _AccountTextField(controller: _accountController), + ), + Padding( + padding: EdgeInsets.only(top: 12.h), + child: + _PasswordTextField(controller: _passwordController), + ), + Padding( + padding: EdgeInsets.only(top: 18.h), + child: const _LoginButton(), + ), + Padding( + padding: EdgeInsets.only(top: 18.h), + child: const _LoginErrorMessage(), + ), + ], + ), + ), + ), + ], + ), + ), + ); + } +} + +class _BackgroundImage extends StatelessWidget { + @override + Widget build(BuildContext context) { + final image = context.select( + (provider) => provider.image, + ); + + return Container( + width: context.width(1), + height: context.height(1), + decoration: BoxDecoration( + image: DecorationImage( + image: MemoryImage(base64Decode(image!)), + fit: BoxFit.cover, + opacity: 0.921, + ), + ), + ); + } +} + +class _AccountTextField extends StatefulWidget { + final TextEditingController controller; + + const _AccountTextField({required this.controller}); + + @override + State<_AccountTextField> createState() => _AccountTextFieldState(); +} + +class _AccountTextFieldState extends State<_AccountTextField> { + Timer? _timer; + final _key = GlobalKey(); + + @override + Widget build(BuildContext context) { + final accountValidating = context + .select((provider) => provider.accountValidating); + + return _FormTextFormField( + formKey: _key, + controller: widget.controller, + hintText: AppLocalizations.of(context).account, + obscureText: false, + prefixIcon: const Icon( + Icons.person_2_rounded, + color: Colors.white, + ), + keyboardType: TextInputType.emailAddress, + textInputAction: TextInputAction.next, + validating: accountValidating, + onChanged: (account) { + context + .read() + .update(LoginProviderAttributes.account, account); + context + .read() + .update(LoginProviderAttributes.accountValidating, true); + setState(() {}); + if (_timer != null) _timer!.cancel(); + _timer = Timer(const Duration(milliseconds: 500), () { + context + .read() + .update(LoginProviderAttributes.accountValidating, false); + _key.currentState!.validate(); + }); + }, + validator: (account) { + if (account == null || account.isEmpty) { + context + .read() + .update(LoginProviderAttributes.isAccountLegal, false); + return AppLocalizations.of(context).account_error; + } + context + .read() + .update(LoginProviderAttributes.isAccountLegal, true); + return null; + }, + ); + } +} + +class _PasswordTextField extends StatefulWidget { + final TextEditingController controller; + + const _PasswordTextField({required this.controller}); + + @override + State<_PasswordTextField> createState() => _PasswordTextFieldState(); +} + +class _PasswordTextFieldState extends State<_PasswordTextField> { + Timer? _timer; + final _key = GlobalKey(); + + @override + Widget build(BuildContext context) { + final passwordValidating = context + .select((provider) => provider.passwordValidating); + + return _FormTextFormField( + formKey: _key, + controller: widget.controller, + hintText: AppLocalizations.of(context).password, + obscureText: true, + prefixIcon: const Icon( + Icons.lock_rounded, + color: Colors.white, + ), + keyboardType: TextInputType.visiblePassword, + validating: passwordValidating, + onChanged: (password) { + context + .read() + .update(LoginProviderAttributes.password, password); + context + .read() + .update(LoginProviderAttributes.passwordValidating, true); + setState(() {}); + if (_timer != null) _timer!.cancel(); + _timer = Timer(const Duration(milliseconds: 500), () { + context + .read() + .update(LoginProviderAttributes.passwordValidating, false); + _key.currentState!.validate(); + }); + }, + validator: (password) { + if (password == null || password.isEmpty) { + context + .read() + .update(LoginProviderAttributes.isPasswordLegal, false); + return AppLocalizations.of(context).password_error; + } + context + .read() + .update(LoginProviderAttributes.isPasswordLegal, true); + return null; + }, + ); + } +} + +class _FormTextFormField extends StatefulWidget { + final Key formKey; + final TextEditingController controller; + + final String hintText; + final bool obscureText; + final Icon prefixIcon; + final TextInputType keyboardType; + final TextInputAction textInputAction; + final Function(String) onChanged; + final String? Function(String?) validator; + final bool validating; + + const _FormTextFormField({ + required this.formKey, + required this.controller, + required this.hintText, + required this.obscureText, + required this.prefixIcon, + required this.keyboardType, + this.textInputAction = TextInputAction.done, + required this.onChanged, + required this.validator, + required this.validating, + }); + + @override + State<_FormTextFormField> createState() => _FormTextFormFieldState(); +} + +class _FormTextFormFieldState extends State<_FormTextFormField> { + @override + Widget build(BuildContext context) { + Widget? suffixIcon = widget.validating + ? const CupertinoActivityIndicator( + color: Colors.white, + ) + : null; + + return SizedBox( + width: context.width(0.85), + child: Form( + key: widget.formKey, + child: TextFormField( + controller: widget.controller, + style: context.tM!.copyWith(color: Colors.white), + keyboardType: widget.keyboardType, + autocorrect: false, + obscureText: widget.obscureText, + textInputAction: widget.textInputAction, + decoration: InputDecoration( + prefixIcon: widget.prefixIcon, + suffixIcon: suffixIcon, + hintText: widget.hintText, + hintStyle: context.tM!.copyWith(color: Colors.white), + errorStyle: context.lL!.copyWith( + color: Colors.redAccent, + letterSpacing: 1.sp, + fontWeight: FontWeight.bold, + ), + border: const OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(35)), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.white.withOpacity(0.5)), + borderRadius: const BorderRadius.all(Radius.circular(35)), + ), + focusedErrorBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.redAccent, width: 1.5.sp), + borderRadius: const BorderRadius.all(Radius.circular(35)), + ), + ), + onChanged: widget.onChanged, + validator: widget.validator, + ), + ), + ); + } +} + +class _LoginButton extends StatelessWidget { + const _LoginButton(); + + @override + Widget build(BuildContext context) { + final isReadyToSubmit = context + .select((provider) => provider.isReadyToSubmit()); + final submitting = + context.select((provider) => provider.submitting); + + return MyTextButton( + text: AppLocalizations.of(context).login, + width: context.width(0.45), + height: 45.sp, + fontSize: 15.sp, + enabled: isReadyToSubmit, + onTap: () => context.read().submit(context), + prefixIcon: submitting + ? CupertinoActivityIndicator(color: context.surface) + : null, + backgroundColor: Colors.white, + fontColor: Colors.black, + ); + } +} + +class _LoginErrorMessage extends StatelessWidget { + const _LoginErrorMessage({super.key}); + + @override + Widget build(BuildContext context) { + final languageProvider = Provider.of(context); + final errorMessage = context + .select((provider) => provider.errorMessage); + + return Text( + languageProvider.getLocaleString(errorMessage ?? ''), + textAlign: TextAlign.center, + style: context.lL!.copyWith( + color: Colors.redAccent, + letterSpacing: 1.sp, + fontWeight: FontWeight.bold, + ), + ); + } +} diff --git a/lib/Provider/Diagnosis/Diagnosis_Item/constitution_provider.dart b/lib/Provider/Diagnosis/Diagnosis_Item/constitution_provider.dart new file mode 100644 index 0000000..f41c650 --- /dev/null +++ b/lib/Provider/Diagnosis/Diagnosis_Item/constitution_provider.dart @@ -0,0 +1,36 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/constitution.dart'; + +class ConstitutionProvider extends ChangeNotifier { + List elements = []; + + ConstitutionProvider() { + init(); + } + + Future init() async { + elements = []; + await refresh(); + if (elements.isEmpty) { + Timer.periodic(const Duration(seconds: 3), (timer) async { + await refresh(); + if (elements.isNotEmpty) timer.cancel(); + }); + } + } + + Future refresh() async { + final res = await API().get_constitutions(); + elements = (res["success"] ?? []) + .map((json) => Constitution.fromJson(json)) + .toList(); + notifyListeners(); + } + + Constitution? findWithId(String id) { + final temp = elements.where((e) => e.id == id).toList(); + return temp.isNotEmpty ? temp.first : null; + } +} diff --git a/lib/Provider/Diagnosis/Diagnosis_Item/posture_issue_provider.dart b/lib/Provider/Diagnosis/Diagnosis_Item/posture_issue_provider.dart new file mode 100644 index 0000000..fa96093 --- /dev/null +++ b/lib/Provider/Diagnosis/Diagnosis_Item/posture_issue_provider.dart @@ -0,0 +1,36 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/posture_issue.dart'; + +class PostureIssueProvider extends ChangeNotifier { + List elements = []; + + PostureIssueProvider() { + init(); + } + + Future init() async { + elements = []; + await refresh(); + if (elements.isEmpty) { + Timer.periodic(const Duration(seconds: 3), (timer) async { + await refresh(); + if (elements.isNotEmpty) timer.cancel(); + }); + } + } + + Future refresh() async { + final res = await API().get_posture_issues(); + elements = (res["success"] ?? []) + .map((json) => PostureIssue.fromJson(json)) + .toList(); + notifyListeners(); + } + + PostureIssue? findWithId(String id) { + final temp = elements.where((e) => e.id == id).toList(); + return temp.isNotEmpty ? temp.first : null; + } +} diff --git a/lib/Provider/Diagnosis/Diagnosis_Item/symptom_provider.dart b/lib/Provider/Diagnosis/Diagnosis_Item/symptom_provider.dart new file mode 100644 index 0000000..b7ccfa4 --- /dev/null +++ b/lib/Provider/Diagnosis/Diagnosis_Item/symptom_provider.dart @@ -0,0 +1,36 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/symptom.dart'; + +class SymptomProvider extends ChangeNotifier { + List elements = []; + + SymptomProvider() { + init(); + } + + Future init() async { + elements = []; + await refresh(); + if (elements.isEmpty) { + Timer.periodic(const Duration(seconds: 3), (timer) async { + await refresh(); + if (elements.isNotEmpty) timer.cancel(); + }); + } + } + + Future refresh() async { + final res = await API().get_symptoms(); + elements = (res["success"] ?? []) + .map((json) => Symptom.fromJson(json)) + .toList(); + notifyListeners(); + } + + Symptom? findWithId(String id) { + final temp = elements.where((e) => e.id == id).toList(); + return temp.isNotEmpty ? temp.first : null; + } +} diff --git a/lib/Provider/Diagnosis/Diagnosis_Item/urban_disease_provider.dart b/lib/Provider/Diagnosis/Diagnosis_Item/urban_disease_provider.dart new file mode 100644 index 0000000..30ff0a5 --- /dev/null +++ b/lib/Provider/Diagnosis/Diagnosis_Item/urban_disease_provider.dart @@ -0,0 +1,49 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/urban_disease.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:provider/provider.dart'; + +class UrbanDiseaseProvider extends ChangeNotifier { + late List elements; + + UrbanDiseaseProvider() { + init(); + } + + Future init() async { + elements = []; + await refresh(); + if (elements.isEmpty) { + Timer.periodic(const Duration(seconds: 3), (timer) async { + await refresh(); + if (elements.isNotEmpty) timer.cancel(); + }); + } + } + + Future refresh() async { + final res = await API().get_urban_diseases(); + elements = (res["success"] ?? []) + .map((json) => UrbanDisease.fromJson(json)) + .toList(); + notifyListeners(); + } + + UrbanDisease? findWithId(String id) { + final temp = elements.where((e) => e.id == id).toList(); + return temp.isNotEmpty ? temp.first : null; + } + + Future getImageWithId(BuildContext context, String id) async { + final locale = context.read().locale; + if (locale == const Locale('zh')) { + final res = await API().get_urban_disease_image(id); + return res["success"]["image"]; + } else { + final res = await API().get_urban_disease_zh_image(id); + return res["success"]["zhImage"]; + } + } +} diff --git a/lib/Provider/Diagnosis/Diagnosis_Item/zong_fu_organ_provider.dart b/lib/Provider/Diagnosis/Diagnosis_Item/zong_fu_organ_provider.dart new file mode 100644 index 0000000..116649d --- /dev/null +++ b/lib/Provider/Diagnosis/Diagnosis_Item/zong_fu_organ_provider.dart @@ -0,0 +1,31 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/zong_fu_organ.dart'; + +class ZongFuOrganProvider extends ChangeNotifier { + List elements = []; + + ZongFuOrganProvider() { + init(); + } + + Future init() async { + elements = []; + await refresh(); + if (elements.isEmpty) { + Timer.periodic(const Duration(seconds: 3), (timer) async { + await refresh(); + if (elements.isNotEmpty) timer.cancel(); + }); + } + } + + Future refresh() async { + final res = await API().get_zong_fu_organs(); + elements = (res["success"] ?? []) + .map((json) => ZongFuOrgan.fromJson(json)) + .toList(); + notifyListeners(); + } +} diff --git a/lib/Provider/Diagnosis/diagnosis_provider.dart b/lib/Provider/Diagnosis/diagnosis_provider.dart new file mode 100644 index 0000000..0b10fd8 --- /dev/null +++ b/lib/Provider/Diagnosis/diagnosis_provider.dart @@ -0,0 +1,141 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/constitution_form.dart'; +import 'package:lamiter/Class/Form/health_index_form.dart'; +import 'package:lamiter/Class/Form/physical_index_form.dart'; +import 'package:lamiter/Class/Form/posture_issue_form.dart'; +import 'package:lamiter/Class/Form/sleep_well_index_form.dart'; +import 'package:lamiter/Class/Form/stress_index_form.dart'; +import 'package:lamiter/Class/Form/urban_disease_form.dart'; +import 'package:lamiter/Class/Form/zong_fu_index_form.dart'; +import 'package:lamiter/Class/User/client.dart'; +import 'package:lamiter/Class/User/manager.dart'; + +class DiagnosisProvider extends ChangeNotifier { + late Diagnosis? diagnosis; + late bool submitting; + + late HealthIndexForm? healthIndexForm; + late PhysicalIndexForm? physicalIndexForm; + late UrbanDiseaseForm? urbanDiseaseForm; + late StressIndexForm? stressIndexForm; + late SleepWellIndexForm? sleepWellIndexForm; + late ConstitutionForm? constitutionForm; + late ZongFuIndexForm? zongFuIndexForm; + late PostureIssueForm? postureIssueForm; + + DiagnosisProvider() { + init(); + } + + void init() { + diagnosis = null; + submitting = false; + healthIndexForm = null; + physicalIndexForm = null; + urbanDiseaseForm = null; + stressIndexForm = null; + sleepWellIndexForm = null; + constitutionForm = null; + zongFuIndexForm = null; + postureIssueForm = null; + notifyListeners(); + } + + void start(Manager manager, Client? client) async { + init(); + diagnosis = Diagnosis( + managerId: manager.id!, + managerName: manager.name, + clientId: client?.id, + ); + notifyListeners(); + } + + void update(DiagnosisType type, dynamic form, dynamic result) { + _updateForm(type, form); + _updateResult(type, result); + } + + void _updateForm(DiagnosisType type, dynamic form) { + switch (type) { + case DiagnosisType.healthIndex: + try { + form as HealthIndexForm?; + healthIndexForm = form; + } catch (e) {} + break; + case DiagnosisType.physicalIndex: + try { + form as PhysicalIndexForm?; + physicalIndexForm = form; + } catch (e) {} + break; + case DiagnosisType.urbanDisease: + try { + form as UrbanDiseaseForm?; + urbanDiseaseForm = form; + } catch (e) {} + break; + case DiagnosisType.stressIndex: + try { + form as StressIndexForm?; + stressIndexForm = form; + } catch (e) {} + break; + case DiagnosisType.sleepWellIndex: + try { + form as SleepWellIndexForm?; + sleepWellIndexForm = form; + } catch (e) {} + break; + case DiagnosisType.constitution: + try { + form as ConstitutionForm?; + constitutionForm = form; + } catch (e) {} + break; + case DiagnosisType.zongFuIndex: + try { + form as ZongFuIndexForm?; + zongFuIndexForm = form; + } catch (e) {} + break; + case DiagnosisType.postureIssue: + try { + form as PostureIssueForm?; + postureIssueForm = form; + } catch (e) {} + break; + } + notifyListeners(); + } + + void _updateResult(DiagnosisType type, dynamic result) { + if (diagnosis == null) return; + diagnosis!.update(type, result); + notifyListeners(); + } + + bool isReadyToSubmit() { + if (diagnosis == null) return false; + return diagnosis!.isReadyToSubmit(); + } + + void updateSubmitting(bool b) { + submitting = b; + notifyListeners(); + } + + Future> submit() async { + updateSubmitting(true); + if (diagnosis?.clientId != null) { + diagnosis?.endTime = DateTime.now(); + final res = await API().create_diagnosis(diagnosis!); + return res; + } + updateSubmitting(false); + return {"success": null}; + } +} diff --git a/lib/Provider/Form/constitution_form_provider.dart b/lib/Provider/Form/constitution_form_provider.dart new file mode 100644 index 0000000..9bbf72f --- /dev/null +++ b/lib/Provider/Form/constitution_form_provider.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/constitution_form.dart'; +import 'package:lamiter/Class/Question/question_decoder.dart'; +import 'package:lamiter/Class/Result/constitution_result.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:provider/provider.dart'; + +class ConstitutionFormProvider + extends FormProvider { + ConstitutionFormProvider() { + init(FormSubmitType.diagnosisProvider); + } + + @override + // ignore: no_leading_underscores_for_local_identifiers + Future start(ConstitutionForm? prevForm) async { + init(FormSubmitType.diagnosisProvider); + updateLoading(true); + final response = await API().get_constitution_form(); + if (!response.containsKey("success")) return; + questions = + QuestionDecoder().decode(response['success']); + notifyListeners(); + if (prevForm == null) { + updateLoading(false); + return; + } + await Future.delayed(Durations.long1, () { + try { + setAndLockAnswer( + '_constitution_form_tongue_image', + prevForm.tongueImage, + ); + } catch (e) {} + }); + notifyListeners(); + updateLoading(false); + } + + @override + Future> submitDPHandler(BuildContext context) async { + try { + ConstitutionForm form = ConstitutionForm(); + form.tongueImage = getAnswer('_constitution_form_tongue_image'); + final result = await API().constitution_analysis(form); + // result?.debug(); + context + .read() + .update(DiagnosisType.constitution, form, result); + return {"success": true}; + } catch (e) { + return {"fail": true}; + } + } + + @override + Future> submitDBHandler( + BuildContext context, ConstitutionForm? prevForm) { + // TODO: implement submitDBHandler + throw UnimplementedError(); + } +} diff --git a/lib/Provider/Form/create_edit_client_form_provider.dart b/lib/Provider/Form/create_edit_client_form_provider.dart new file mode 100644 index 0000000..fba16ea --- /dev/null +++ b/lib/Provider/Form/create_edit_client_form_provider.dart @@ -0,0 +1,74 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Question/question_decoder.dart'; +import 'package:lamiter/Class/User/client.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; + +class CreateEditClientFormProvider extends FormProvider { + CreateEditClientFormProvider() { + init(FormSubmitType.database); + } + + @override + // ignore: no_leading_underscores_for_local_identifiers + Future start(Client? prevForm) async { + init(FormSubmitType.database); + updateLoading(true); + final response = await API().get_create_client_form(); + if (!response.containsKey("success")) return; + questions = QuestionDecoder() + .decode(response["success"]); + notifyListeners(); + if (prevForm == null) { + updateLoading(false); + return; + } + setAnswer('_create_client_form_name', prevForm.name); + setAnswer('_create_client_form_birthday', prevForm.birthday); + setAnswer('_create_client_form_phone_number', prevForm.phoneNumber); + // setAnswer('_create_client_form_email', data.email); + setAnswer('_create_client_form_note', prevForm.note); + await Future.delayed(Durations.long1, () { + try { + setAnswer('_create_client_form_photo', prevForm.photo); + setAnswer('_create_client_form_gender', prevForm.gender); + } catch (e) {} + }); + notifyListeners(); + updateLoading(false); + } + + @override + Future> submitDBHandler( + BuildContext context, Client? prevForm) async { + final client = Client( + id: prevForm?.id, + name: getAnswer('_create_client_form_name') ?? prevForm?.name, + photo: getAnswer('_create_client_form_photo') ?? prevForm?.photo, + gender: getAnswer('_create_client_form_gender') ?? prevForm?.gender, + birthday: getAnswer('_create_client_form_birthday') ?? prevForm?.birthday, + phoneNumber: getAnswer('_create_client_form_phone_number') ?? + prevForm?.phoneNumber, + note: getAnswer('_create_client_form_note') ?? prevForm?.note, + tag: getAnswer('_create_client_form_tag') != null + ? getAnswer('_create_client_form_tag').score + : prevForm?.tag ?? 0, + createTime: prevForm?.createTime ?? DateTime.now(), + lastUpdateTime: DateTime.now(), + ); // client.debug(); + final manager = context.read().self!; + if (client.id == null) { + return await API().create_client(manager.id!, client); + } else { + return await API().update_client(manager.id!, client); + } + } + + @override + Future> submitDPHandler(BuildContext context) async { + // TODO: implement submitDPHandler + throw UnimplementedError(); + } +} diff --git a/lib/Provider/Form/form_provider.dart b/lib/Provider/Form/form_provider.dart new file mode 100644 index 0000000..bcc87bf --- /dev/null +++ b/lib/Provider/Form/form_provider.dart @@ -0,0 +1,89 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/Question/question.dart'; + +enum FormSubmitType { database, diagnosisProvider } + +abstract class FormProvider extends ChangeNotifier { + late FormSubmitType submitType; + late List questions; + late bool submitting; + late bool loading; + Future start(Form? prevForm); + Future> submitDBHandler( + BuildContext context, Form? prevForm); + Future> submitDPHandler(BuildContext context); + Future> submit( + BuildContext context, Form? prevForm) async { + FocusManager.instance.primaryFocus?.unfocus(); + updateSubmitting(true); + switch (submitType) { + case FormSubmitType.database: + final response = await submitDBHandler(context, prevForm); + updateSubmitting(false); + return response; + case FormSubmitType.diagnosisProvider: + final response = await submitDPHandler(context); + updateSubmitting(false); + return response; + } + } + + void init(FormSubmitType type) { + submitType = type; + questions = []; + submitting = false; + loading = false; + notifyListeners(); + } + + void updateSubmitting(bool b) { + submitting = b; + notifyListeners(); + } + + void updateLoading(bool b) { + loading = b; + notifyListeners(); + } + + bool isReadyToSubmit() { + if (submitting) return false; + for (Question question in questions) { + if (!question.isAnswerRequiredAndLegal()) return false; + } + return true; + } + + dynamic getAnswer(String id) { + Question? question = _findQuestionById(id); + return question?.answer; + } + + void setAnswer(String id, dynamic answer) { + Question? question = _findQuestionById(id); + question?.answer = answer; + question?.setAnswerLayout(answer); + notifyListeners(); + } + + void setAndLockAnswer(String id, dynamic answer) { + setAnswer(id, answer); + _lockAnswer(id); + } + + void _lockAnswer(String id) { + Question? question = _findQuestionById(id); + question?.lockAnswerLayouot(); + notifyListeners(); + } + + Question? _findQuestionById(String id) { + List temp = + questions.where((question) => question.id == id).toList(); + return temp.isEmpty ? null : temp.first; + } + + void refresh() { + notifyListeners(); + } +} diff --git a/lib/Provider/Form/health_index_form_provider.dart b/lib/Provider/Form/health_index_form_provider.dart new file mode 100644 index 0000000..6693576 --- /dev/null +++ b/lib/Provider/Form/health_index_form_provider.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/health_index_form.dart'; +import 'package:lamiter/Class/Question/question_decoder.dart'; +import 'package:lamiter/Class/Question/scq.dart'; +import 'package:lamiter/Class/Result/health_index_result.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:provider/provider.dart'; + +class HealthIndexFormProvider + extends FormProvider { + HealthIndexFormProvider() { + init(FormSubmitType.diagnosisProvider); + } + + @override + // ignore: no_leading_underscores_for_local_identifiers + Future start(HealthIndexForm? prevForm) async { + init(FormSubmitType.diagnosisProvider); + updateLoading(true); + final response = await API().get_health_index_form(); + if (!response.containsKey("success")) return; + questions = + QuestionDecoder().decode(response['success']); + notifyListeners(); + if (prevForm == null) { + updateLoading(false); + return; + } + await Future.delayed(Durations.long1, () { + try { + prevForm.scores.forEach((String qid, SCQAnswer answer) { + setAndLockAnswer(qid, answer); + }); + } catch (e) {} + }); + notifyListeners(); + updateLoading(false); + } + + @override + Future> submitDPHandler(BuildContext context) async { + try { + HealthIndexForm form = HealthIndexForm(); + form.scores.forEach((String qid, SCQAnswer answer) { + form.scores[qid] = getAnswer(qid); + }); + final result = HealthIndexResult.fromForm(form); + context + .read() + .update(DiagnosisType.healthIndex, form, result); + return {"success": true}; + } catch (e) { + return {"fail": true}; + } + } + + @override + Future> submitDBHandler( + BuildContext context, HealthIndexForm? prevForm) { + // TODO: implement submitDBHandler + throw UnimplementedError(); + } +} diff --git a/lib/Provider/Form/physical_index_form_provider.dart b/lib/Provider/Form/physical_index_form_provider.dart new file mode 100644 index 0000000..3cb96b7 --- /dev/null +++ b/lib/Provider/Form/physical_index_form_provider.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/physical_index_form.dart'; +import 'package:lamiter/Class/Question/question_decoder.dart'; +import 'package:lamiter/Class/Result/physical_index_result.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:provider/provider.dart'; + +class PhysicalIndexFormProvider + extends FormProvider { + PhysicalIndexFormProvider() { + init(FormSubmitType.diagnosisProvider); + } + + @override + // ignore: no_leading_underscores_for_local_identifiers + Future start(PhysicalIndexForm? prevForm) async { + init(FormSubmitType.diagnosisProvider); + updateLoading(true); + final response = await API().get_physical_index_form(); + if (!response.containsKey("success")) return; + questions = QuestionDecoder() + .decode(response['success']); + notifyListeners(); + if (prevForm == null) { + updateLoading(false); + return; + } + await Future.delayed(Durations.long1, () { + setAndLockAnswer('_physical_index_age', prevForm.age.toString()); + setAndLockAnswer('_physical_index_gender', prevForm.gender); + setAndLockAnswer('_physical_index_weight', prevForm.weight.toString()); + setAndLockAnswer('_physical_index_height', prevForm.height.toString()); + }); + updateLoading(false); + } + + @override + Future> submitDPHandler(BuildContext context) async { + try { + final form = PhysicalIndexForm(); + form.age = int.parse(getAnswer('_physical_index_age')); + form.gender = getAnswer('_physical_index_gender') ?? false; + form.weight = num.parse(getAnswer('_physical_index_weight')); + form.height = num.parse(getAnswer('_physical_index_height')); + final result = PhysicalIndexResult.fromForm(form); + context + .read() + .update(DiagnosisType.physicalIndex, form, result); + return {"success": true}; + } catch (e) { + return {"fail": true}; + } + } + + @override + Future> submitDBHandler( + BuildContext context, PhysicalIndexForm? prevForm) { + // TODO: implement submitDBHandler + throw UnimplementedError(); + } +} diff --git a/lib/Provider/Form/posture_issue_form_provider.dart b/lib/Provider/Form/posture_issue_form_provider.dart new file mode 100644 index 0000000..61fd61c --- /dev/null +++ b/lib/Provider/Form/posture_issue_form_provider.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/posture_issue_form.dart'; +import 'package:lamiter/Class/Question/question_decoder.dart'; +import 'package:lamiter/Class/Result/posture_issue_result.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:provider/provider.dart'; + +class PostureIssueFormProvider + extends FormProvider { + PostureIssueFormProvider() { + init(FormSubmitType.diagnosisProvider); + } + + @override + // ignore: no_leading_underscores_for_local_identifiers + Future start(PostureIssueForm? prevForm) async { + init(FormSubmitType.diagnosisProvider); + updateLoading(true); + final response = await API().get_posture_issue_form(); + if (!response.containsKey("success")) return; + questions = + QuestionDecoder().decode(response['success']); + notifyListeners(); + if (prevForm == null) { + updateLoading(false); + return; + } + await Future.delayed(Durations.long1, () { + try { + setAndLockAnswer( + '_posture_issue_form_front_view_image', + prevForm.frontViewImage, + ); + setAndLockAnswer( + '_posture_issue_form_side_view_image', + prevForm.sideViewImage, + ); + } catch (e) {} + }); + notifyListeners(); + updateLoading(false); + } + + @override + Future> submitDPHandler(BuildContext context) async { + try { + PostureIssueForm form = PostureIssueForm(); + form.frontViewImage = getAnswer('_posture_issue_form_front_view_image'); + form.sideViewImage = getAnswer('_posture_issue_form_side_view_image'); + final result = await API().posture_issue_analysis(form); + context + .read() + .update(DiagnosisType.postureIssue, form, result); + return {"success": true}; + } catch (e) { + return {"fail": true}; + } + } + + @override + Future> submitDBHandler( + BuildContext context, PostureIssueForm? prevForm) { + // TODO: implement submitDBHandler + throw UnimplementedError(); + } +} diff --git a/lib/Provider/Form/sleep_well_index_form_provider.dart b/lib/Provider/Form/sleep_well_index_form_provider.dart new file mode 100644 index 0000000..164770f --- /dev/null +++ b/lib/Provider/Form/sleep_well_index_form_provider.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/sleep_well_index_form.dart'; +import 'package:lamiter/Class/Question/question_decoder.dart'; +import 'package:lamiter/Class/Question/scq.dart'; +import 'package:lamiter/Class/Result/sleep_well_index_result.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:provider/provider.dart'; + +class SleepWellIndexFormProvider + extends FormProvider { + SleepWellIndexFormProvider() { + init(FormSubmitType.diagnosisProvider); + } + + @override + // ignore: no_leading_underscores_for_local_identifiers + Future start(SleepWellIndexForm? prevForm) async { + init(FormSubmitType.diagnosisProvider); + updateLoading(true); + final response = await API().get_sleep_well_index_form(); + if (!response.containsKey("success")) return; + questions = QuestionDecoder() + .decode(response['success']); + notifyListeners(); + if (prevForm == null) { + updateLoading(false); + return; + } + await Future.delayed(Durations.long1, () { + try { + prevForm.scores.forEach((String qid, SCQAnswer answer) { + setAndLockAnswer(qid, answer); + }); + } catch (e) {} + }); + notifyListeners(); + updateLoading(false); + } + + @override + Future> submitDPHandler(BuildContext context) async { + try { + SleepWellIndexForm form = SleepWellIndexForm(); + form.scores.forEach((String qid, SCQAnswer answer) { + form.scores[qid] = getAnswer(qid); + }); + final result = SleepWellIndexResult.fromForm(form); + context + .read() + .update(DiagnosisType.sleepWellIndex, form, result); + return {"success": true}; + } catch (e) { + return {"fail": true}; + } + } + + @override + Future> submitDBHandler( + BuildContext context, SleepWellIndexForm? prevForm) { + // TODO: implement submitDBHandler + throw UnimplementedError(); + } +} diff --git a/lib/Provider/Form/stress_index_form_provider.dart b/lib/Provider/Form/stress_index_form_provider.dart new file mode 100644 index 0000000..8f8204a --- /dev/null +++ b/lib/Provider/Form/stress_index_form_provider.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/stress_index_form.dart'; +import 'package:lamiter/Class/Question/question_decoder.dart'; +import 'package:lamiter/Class/Question/scq.dart'; +import 'package:lamiter/Class/Result/stress_index_result.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:provider/provider.dart'; + +class StressIndexFormProvider + extends FormProvider { + StressIndexFormProvider() { + init(FormSubmitType.diagnosisProvider); + } + + @override + // ignore: no_leading_underscores_for_local_identifiers + Future start(StressIndexForm? prevForm) async { + init(FormSubmitType.diagnosisProvider); + updateLoading(true); + final response = await API().get_stress_index_form(); + if (!response.containsKey("success")) return; + questions = + QuestionDecoder().decode(response['success']); + notifyListeners(); + if (prevForm == null) { + updateLoading(false); + return; + } + await Future.delayed(Durations.long1, () { + try { + prevForm.scores.forEach((String qid, SCQAnswer answer) { + setAndLockAnswer(qid, answer); + }); + } catch (e) {} + }); + notifyListeners(); + updateLoading(false); + } + + @override + Future> submitDPHandler(BuildContext context) async { + try { + StressIndexForm form = StressIndexForm(); + form.scores.forEach((String qid, SCQAnswer answer) { + form.scores[qid] = getAnswer(qid); + }); + final result = StressIndexResult.fromForm(form); + context + .read() + .update(DiagnosisType.stressIndex, form, result); + return {"success": true}; + } catch (e) { + return {"fail": true}; + } + } + + @override + Future> submitDBHandler( + BuildContext context, StressIndexForm? prevForm) { + // TODO: implement submitDBHandler + throw UnimplementedError(); + } +} diff --git a/lib/Provider/Form/urban_disease_form_provider.dart b/lib/Provider/Form/urban_disease_form_provider.dart new file mode 100644 index 0000000..cc23c25 --- /dev/null +++ b/lib/Provider/Form/urban_disease_form_provider.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/urban_disease_form.dart'; +import 'package:lamiter/Class/Question/question_decoder.dart'; +import 'package:lamiter/Class/Result/urban_disease_result.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:provider/provider.dart'; + +class UrbanDiseaseFormProvider + extends FormProvider { + UrbanDiseaseFormProvider() { + init(FormSubmitType.diagnosisProvider); + } + + @override + // ignore: no_leading_underscores_for_local_identifiers + Future start(UrbanDiseaseForm? prevForm) async { + init(FormSubmitType.diagnosisProvider); + updateLoading(true); + final response = await API().get_urban_disease_form(); + if (!response.containsKey("success")) return; + questions = + QuestionDecoder().decode(response['success']); + notifyListeners(); + if (prevForm == null) { + updateLoading(false); + return; + } + await Future.delayed(Durations.long1, () { + try { + prevForm.diseaseStatus.forEach((String qid, bool hasDisease) { + setAndLockAnswer(qid, hasDisease); + }); + } catch (e) {} + }); + notifyListeners(); + updateLoading(false); + } + + @override + Future> submitDPHandler(BuildContext context) async { + try { + UrbanDiseaseForm form = UrbanDiseaseForm(); + form.diseaseStatus.forEach((String qid, bool hasDisease) { + form.diseaseStatus[qid] = getAnswer(qid); + }); + final result = UrbanDiseaseResult.fromForm(context, form); + context + .read() + .update(DiagnosisType.urbanDisease, form, result); + return {"success": true}; + } catch (e) { + return {"fail": true}; + } + } + + @override + Future> submitDBHandler( + BuildContext context, UrbanDiseaseForm? prevForm) { + // TODO: implement submitDBHandler + throw UnimplementedError(); + } +} diff --git a/lib/Provider/Form/zong_fu_index_form_provider.dart b/lib/Provider/Form/zong_fu_index_form_provider.dart new file mode 100644 index 0000000..18be901 --- /dev/null +++ b/lib/Provider/Form/zong_fu_index_form_provider.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Form/zong_fu_index_form.dart'; +import 'package:lamiter/Class/Question/question_decoder.dart'; +import 'package:lamiter/Class/Question/scq.dart'; +import 'package:lamiter/Class/Result/zong_fu_index_result.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/form_provider.dart'; +import 'package:provider/provider.dart'; + +class ZongFuIndexFormProvider + extends FormProvider { + ZongFuIndexFormProvider() { + init(FormSubmitType.diagnosisProvider); + } + + @override + // ignore: no_leading_underscores_for_local_identifiers + Future start(ZongFuIndexForm? prevForm) async { + init(FormSubmitType.diagnosisProvider); + updateLoading(true); + final response = await API().get_zong_fu_index_form(); + if (!response.containsKey("success")) return; + questions = + QuestionDecoder().decode(response['success']); + notifyListeners(); + if (prevForm == null) { + updateLoading(false); + return; + } + await Future.delayed(Durations.long1, () { + try { + prevForm.scores.forEach((String qid, SCQAnswer answer) { + setAndLockAnswer(qid, answer); + }); + } catch (e) {} + }); + notifyListeners(); + updateLoading(false); + } + + @override + Future> submitDPHandler(BuildContext context) async { + try { + ZongFuIndexForm form = ZongFuIndexForm(); + form.scores.forEach((String qid, SCQAnswer answer) { + form.scores[qid] = getAnswer(qid); + }); + final result = ZongFuIndexResult.fromForm(context, form); + context + .read() + .update(DiagnosisType.zongFuIndex, form, result); + return {"success": true}; + } catch (e) { + return {"fail": true}; + } + } + + @override + Future> submitDBHandler( + BuildContext context, ZongFuIndexForm? prevForm) { + // TODO: implement submitDBHandler + throw UnimplementedError(); + } +} diff --git a/lib/Provider/Language/language_provider.dart b/lib/Provider/Language/language_provider.dart new file mode 100644 index 0000000..8cd7b3b --- /dev/null +++ b/lib/Provider/Language/language_provider.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/l10n/l10n.dart'; +import 'package:pinyin/pinyin.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class LanguageProvider extends ChangeNotifier { + Locale _locale = L10n.locales.first; + Locale get locale => _locale; + + LanguageProvider() { + loadLanguage(); + } + + // 初始化語言設定 + Future loadLanguage() async { + final prefs = await SharedPreferences.getInstance(); + String? languageCode = prefs.getString('languageCode'); + String? countryCode = prefs.getString('countryCode'); + if (languageCode != null && countryCode != null) { + _locale = Locale(languageCode, countryCode); + } + notifyListeners(); + } + + // 設定語言 + Future setLocale(Locale value) async { + if (!L10n.locales.contains(value)) return; + final prefs = await SharedPreferences.getInstance(); + await prefs.setString('languageCode', value.languageCode); + await prefs.setString('countryCode', value.countryCode ?? ''); + _locale = value; + notifyListeners(); + } + + String getLocaleString(String string) { + ChineseHelper.addTradToSimpMap({'週': '周'}); + ChineseHelper.addSimpToTradMap({'周': '週'}); + ChineseHelper.addTradToSimpMap({'菸': '烟'}); + ChineseHelper.addSimpToTradMap({'烟': '菸'}); + ChineseHelper.addTradToSimpMap({'複': '复'}); + ChineseHelper.addSimpToTradMap({'复': '複'}); + ChineseHelper.addTradToSimpMap({'製': '制'}); + ChineseHelper.addSimpToTradMap({'制': '製'}); + ChineseHelper.addTradToSimpMap({'酸': '酸'}); + ChineseHelper.addSimpToTradMap({'酸': '酸'}); + ChineseHelper.addTradToSimpMap({'乾': '干'}); + ChineseHelper.addSimpToTradMap({'干': '乾'}); + if (_locale == const Locale('zh', 'TW')) { + return ChineseHelper.convertToTraditionalChinese(string); + } else if (_locale == const Locale('zh')) { + return ChineseHelper.convertToSimplifiedChinese(string); + } + return string; + } +} diff --git a/lib/Provider/Service/MedicalFacility/medical_facility_provider.dart b/lib/Provider/Service/MedicalFacility/medical_facility_provider.dart new file mode 100644 index 0000000..a76a29d --- /dev/null +++ b/lib/Provider/Service/MedicalFacility/medical_facility_provider.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Service/MedicalFacility/medical_facility.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; + +class MedicalFacilityProvider extends ChangeNotifier { + late List medicalFacilities; + + MedicalFacilityProvider() { + init(); + } + + void init() { + medicalFacilities = []; + notifyListeners(); + } + + Future start(BuildContext context) async { + final manager = context.read().self; + final res = await API().get_medical_facilities(manager!.id!); + if (res.containsKey("success")) { + medicalFacilities = res["success"] + .map((json) => MedicalFacility.fromJson(json)) + .toList(); + } else { + medicalFacilities = []; + } + notifyListeners(); + } +} diff --git a/lib/Provider/Service/SeasonalRacipe/constitution_seasonal_recipe_provider.dart b/lib/Provider/Service/SeasonalRacipe/constitution_seasonal_recipe_provider.dart new file mode 100644 index 0000000..52c5f81 --- /dev/null +++ b/lib/Provider/Service/SeasonalRacipe/constitution_seasonal_recipe_provider.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Service/SeasonalRecipe/seasonal_recipe.dart'; + +class ConstitutionSeasonalRecipeProvider extends ChangeNotifier { + late List seasonalRecipes; + + ConstitutionSeasonalRecipeProvider() { + init(); + } + + void init() { + seasonalRecipes = []; + notifyListeners(); + } + + Future start( + BuildContext context, String constitutionId, String season) async { + final res = await API().get_seasonal_recipe(constitutionId, season); + if (res.containsKey("success")) { + seasonalRecipes = res["success"] + .map((json) => SeasonalRecipe.fromJson(json)) + .toList(); + notifyListeners(); + } + } +} diff --git a/lib/Provider/Service/course_provider.dart b/lib/Provider/Service/course_provider.dart new file mode 100644 index 0000000..5fbae81 --- /dev/null +++ b/lib/Provider/Service/course_provider.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Entity/entity.dart'; +import 'package:lamiter/Class/Service/course.dart'; +import 'package:lamiter/Class/Service/service_item_filt_type.dart'; +import 'package:lamiter/Provider/Service/service_item_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; + +class CourseProvider extends ServiceItemProvider { + CourseProvider() : super() { + super.init(); + } + + @override + List filtTypes() { + return [ + ServiceItemFiltType.supportCompany, + ServiceItemFiltType.urbanDisease, + ServiceItemFiltType.constitution, + ServiceItemFiltType.postureIssue, + ]; + } + + @override + Future refresh(BuildContext context) async { + final manaer = context.read().self; + + // 療程 + var res = await API().get_courses(manaer!.id!); + if (res.containsKey("success")) { + serviceItems = + res["success"].map((json) => Course.fromJson(json)).toList(); + filtedList = sortWithLastUpdateTime(serviceItems); + } + + // 品牌 + Set companyPairsSet = {}; + for (var serviceItem in serviceItems) { + var companyPair = + Entity(id: serviceItem.companyId, name: serviceItem.companyName); + companyPairsSet.add(companyPair); + } + companyPairs = companyPairsSet.toList(); + + notifyListeners(); + } +} diff --git a/lib/Provider/Service/product_provider.dart b/lib/Provider/Service/product_provider.dart new file mode 100644 index 0000000..5d6603f --- /dev/null +++ b/lib/Provider/Service/product_provider.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Entity/entity.dart'; +import 'package:lamiter/Class/Service/product.dart'; +import 'package:lamiter/Class/Service/service_item_filt_type.dart'; +import 'package:lamiter/Provider/Service/service_item_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; + +class ProductProvider extends ServiceItemProvider { + ProductProvider() : super() { + super.init(); + } + + @override + List filtTypes() { + return [ + ServiceItemFiltType.supportCompany, + ServiceItemFiltType.productCategory, + ServiceItemFiltType.urbanDisease, + ServiceItemFiltType.constitution, + ServiceItemFiltType.postureIssue, + ]; + } + + @override + Future refresh(BuildContext context) async { + final manaer = context.read().self; + + // 商品 + var res = await API().get_products(manaer!.id!); + if (res.containsKey("success")) { + serviceItems = res["success"] + .map((json) => Product.fromJson(json)) + .toList(); + filtedList = sortWithLastUpdateTime(serviceItems); + } + + // 品牌 + Set companyPairsSet = {}; + for (var serviceItem in serviceItems) { + var companyPair = + Entity(id: serviceItem.companyId, name: serviceItem.companyName); + companyPairsSet.add(companyPair); + } + companyPairs = companyPairsSet.toList(); + + // 商品種類 + Set productCategoryPairsSet = {}; + for (Product serviceItem in serviceItems as List) { + var productCategoryPair = Entity( + id: serviceItem.productCategoryId, + name: serviceItem.productCategoryName); + productCategoryPairsSet.add(productCategoryPair); + } + productCategoryPairs = productCategoryPairsSet.toList(); + + notifyListeners(); + } +} diff --git a/lib/Provider/Service/service_item_provider.dart b/lib/Provider/Service/service_item_provider.dart new file mode 100644 index 0000000..bdae3a0 --- /dev/null +++ b/lib/Provider/Service/service_item_provider.dart @@ -0,0 +1,184 @@ +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/Entity/entity.dart'; + +import 'package:lamiter/Class/Service/service_item.dart'; +import 'package:lamiter/Class/Service/service_item_filt_type.dart'; +import 'package:lamiter/Mixin/filter.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/constitution_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/posture_issue_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/urban_disease_provider.dart'; +import 'package:provider/provider.dart'; + +abstract class ServiceItemProvider extends ChangeNotifier with Filter { + // 品牌與服務項目 + late List serviceItems; + late List companyPairs; + late List productCategoryPairs; + late List urbanDiseasePairs; + late List constitutionPairs; + late List postureIssuePairs; + + // 篩選條件 + late String keyword; + late List selectedCompanyIds; + late List selectedProductCategoryIds; + late List selectedUrbanDiseaseIds; + late List selectedConstitutionIds; + late List selectedPostureIssueIds; + + ServiceItemProvider() { + init(); + } + + List filtTypes(); // 選擇開放的篩選條件 + + void init() { + // 配對商品 + serviceItems = []; + filtedList = []; // 主要呈現列表 + // 標籤 + companyPairs = []; + productCategoryPairs = []; + urbanDiseasePairs = []; + constitutionPairs = []; + postureIssuePairs = []; + // 篩選標籤 + keyword = ''; + selectedCompanyIds = []; + selectedProductCategoryIds = []; + selectedUrbanDiseaseIds = []; + selectedConstitutionIds = []; + selectedPostureIssueIds = []; + notifyListeners(); + } + + Future start(BuildContext context, Diagnosis? diagnosis) async { + init(); + // 固定標籤 + urbanDiseasePairs = context + .read() + .elements + .map((urbanDisease) => + Entity(id: urbanDisease.id, name: urbanDisease.name)) + .toList(); + constitutionPairs = context + .read() + .elements + .map((constitution) => + Entity(id: constitution.id, name: constitution.name)) + .toList(); + postureIssuePairs = context + .read() + .elements + .map((postureIssue) => + Entity(id: postureIssue.id, name: postureIssue.name)) + .toList(); + // 依據診斷報告調整篩選標籤 + keyword = ''; + selectedCompanyIds = []; + selectedProductCategoryIds = []; + selectedUrbanDiseaseIds = diagnosis?.urbanDiseaseResult?.diseaseIds ?? []; + selectedConstitutionIds = diagnosis?.constitutionResult + ?.risk_constitutions(context) + .map((constitution) => constitution.id) + .toList() ?? + []; + selectedPostureIssueIds = diagnosis?.postureIssueResult + ?.risk_posture_issues(context) + .map((postureIssue) => postureIssue.id) + .toList() ?? + []; + await refresh(context); + } + + Future refresh(BuildContext context); + + int filtCount() { + int count = 0; + if (selectedCompanyIds.isNotEmpty) count++; + if (selectedProductCategoryIds.isNotEmpty) count++; + if (selectedUrbanDiseaseIds.isNotEmpty) count++; + if (selectedConstitutionIds.isNotEmpty) count++; + if (selectedPostureIssueIds.isNotEmpty) count++; + return count; + } + + void updateKeyword(String value) { + keyword = value; + _filt(); + } + + void updateServiceItemFiltType(ServiceItemFiltType type, String id) { + int index = findServiceItemFiltTypeWithId(type, id); + switch (type) { + case ServiceItemFiltType.supportCompany: + if (index == -1) { + selectedCompanyIds.add(id); + } else { + selectedCompanyIds.removeAt(index); + } + break; + case ServiceItemFiltType.productCategory: + if (index == -1) { + selectedProductCategoryIds.add(id); + } else { + selectedProductCategoryIds.removeAt(index); + } + break; + case ServiceItemFiltType.urbanDisease: + if (index == -1) { + selectedUrbanDiseaseIds.add(id); + } else { + selectedUrbanDiseaseIds.removeAt(index); + } + break; + case ServiceItemFiltType.constitution: + if (index == -1) { + selectedConstitutionIds.add(id); + } else { + selectedConstitutionIds.removeAt(index); + } + break; + case ServiceItemFiltType.postureIssue: + if (index == -1) { + selectedPostureIssueIds.add(id); + } else { + selectedPostureIssueIds.removeAt(index); + } + break; + } + _filt(); + } + + int findServiceItemFiltTypeWithId(ServiceItemFiltType type, String id) { + switch (type) { + case ServiceItemFiltType.supportCompany: + return selectedCompanyIds.indexWhere((_id) => _id == id); + case ServiceItemFiltType.productCategory: + return selectedProductCategoryIds.indexWhere((_id) => _id == id); + case ServiceItemFiltType.urbanDisease: + return selectedUrbanDiseaseIds.indexWhere((_id) => _id == id); + case ServiceItemFiltType.constitution: + return selectedConstitutionIds.indexWhere((_id) => _id == id); + case ServiceItemFiltType.postureIssue: + return selectedPostureIssueIds.indexWhere((_id) => _id == id); + } + } + + void _filt() { + super.filtedList = serviceItems; + super.filtedList = filtWithKeyword(super.filtedList!, keyword); + super.filtedList = filtWithCompany(super.filtedList!, selectedCompanyIds); + super.filtedList = + filtWithProductCategory(super.filtedList!, selectedProductCategoryIds); + super.filtedList = filtWithHealthConditions( + super.filtedList!, + selectedUrbanDiseaseIds, + selectedConstitutionIds, + selectedPostureIssueIds, + ); + super.filtedList = sortWithLastUpdateTime(super.filtedList!); + notifyListeners(); + } +} diff --git a/lib/Provider/Service/treatment_provider.dart b/lib/Provider/Service/treatment_provider.dart new file mode 100644 index 0000000..cd5ef92 --- /dev/null +++ b/lib/Provider/Service/treatment_provider.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Entity/entity.dart'; +import 'package:lamiter/Class/Service/service_item_filt_type.dart'; +import 'package:lamiter/Class/Service/treatment.dart'; +import 'package:lamiter/Provider/Service/service_item_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; + +class TreatmentProvider extends ServiceItemProvider { + TreatmentProvider() : super() { + super.init(); + } + + @override + List filtTypes() { + return [ + ServiceItemFiltType.supportCompany, + ServiceItemFiltType.urbanDisease, + ServiceItemFiltType.constitution, + ServiceItemFiltType.postureIssue, + ]; + } + + @override + Future refresh(BuildContext context) async { + final manaer = context.read().self; + + // 療程 + var res = await API().get_treatments(manaer!.id!); + if (res.containsKey("success")) { + serviceItems = res["success"] + .map((json) => Treatment.fromJson(json)) + .toList(); + filtedList = sortWithLastUpdateTime(serviceItems); + } + + // 品牌 + Set companyPairsSet = {}; + for (var serviceItem in serviceItems) { + var companyPair = + Entity(id: serviceItem.companyId, name: serviceItem.companyName); + companyPairsSet.add(companyPair); + } + companyPairs = companyPairsSet.toList(); + + notifyListeners(); + } +} diff --git a/lib/Provider/User/Client/client_calendar_provider.dart b/lib/Provider/User/Client/client_calendar_provider.dart new file mode 100644 index 0000000..0ee75a4 --- /dev/null +++ b/lib/Provider/User/Client/client_calendar_provider.dart @@ -0,0 +1,227 @@ +import 'package:flutter/material.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/Diagnosis/diagnosis.dart'; +import 'package:lamiter/Class/User/client.dart'; + +enum ClientCalendarType { + history, + compare, + trend, +} + +class ClientCalendarProvider extends ChangeNotifier { + late Client? _self; + late List diagnoses; + + late DateTime historySelectedDate; + late List compareSelectedDates; + late List trendSelectedDates; + + late Diagnosis? historyDiagnosis; + late List compareDiagnoses; + + late bool loading; + + ClientCalendarProvider() { + init(); + } + + void init() { + _self = null; + diagnoses = []; + loading = false; + + // 選擇日期 + DateTime now = DateTime.now(); + DateTime today = DateTime(now.year, now.month, now.day); + historySelectedDate = today; + compareSelectedDates = List.generate(2, (index) { + return today; + }); + trendSelectedDates = List.generate(2, (index) { + return null; + }); + + // 選擇報告 + historyDiagnosis = null; + compareDiagnoses = List.generate(2, (index) { + return null; + }); + notifyListeners(); + } + + Future start(Client client, BuildContext context) async { + init(); + _self = client; + DateTime now = DateTime.now(); + DateTime today = DateTime(now.year, now.month, now.day); + historySelectedDate = today; + compareSelectedDates = List.generate(2, (index) { + return today; + }); + trendSelectedDates = List.generate(2, (index) { + return null; + }); + historyDiagnosis = null; + compareDiagnoses = List.generate(2, (index) { + return null; + }); + updateLoading(true); + await refresh(); + updateLoading(false); + } + + void updateLoading(bool b) { + loading = b; + notifyListeners(); + } + + Future refresh() async { + // todo db + if (_self == null) return; + final res = await API().get_diagnoses(_self!.id!); + if (res.containsKey("success")) { + diagnoses = res["success"] + .map((json) => Diagnosis.fromJson(json)) + .toList(); + } else { + diagnoses = []; + } + notifyListeners(); + } + + void selectDate(DateTime date, ClientCalendarType type, {int? index}) { + switch (type) { + case ClientCalendarType.history: + historySelectedDate = date; + break; + case ClientCalendarType.compare: + compareSelectedDates[(index ?? 0) % compareSelectedDates.length] = date; + break; + case ClientCalendarType.trend: + if (trendSelectedDates[0] == null) { + trendSelectedDates[0] = date; + } else if (trendSelectedDates[1] == null) { + int compare = trendSelectedDates[0]!.compareTo(date); + if (compare < 0) trendSelectedDates[1] = date; + if (compare > 0) { + trendSelectedDates[1] = trendSelectedDates[0]; + trendSelectedDates[0] = date; + } + } else { + trendSelectedDates[0] = date; + trendSelectedDates[1] = null; + } + break; + } + notifyListeners(); + } + + bool isSelectedDate(DateTime date, ClientCalendarType type, {int? index}) { + switch (type) { + case ClientCalendarType.history: + return historySelectedDate == date; + case ClientCalendarType.compare: + return compareSelectedDates[ + (index ?? 0) % compareSelectedDates.length] == + date; + case ClientCalendarType.trend: + if (trendSelectedDates[0] == null && trendSelectedDates[1] == null) { + return false; + } else if (trendSelectedDates[0] != null && + trendSelectedDates[1] != null) { + return date.compareTo(trendSelectedDates[0]!) >= 0 && + date.compareTo(trendSelectedDates[1]!) <= 0; + } else { + DateTime trendSelectedDate = + trendSelectedDates[0] ?? trendSelectedDates[1]!; + return trendSelectedDate == date; + } + } + } + + bool isDateHasSelectedDiagnosis(DateTime date, ClientCalendarType type, + {int? index}) { + Diagnosis? diagnosis; + switch (type) { + case ClientCalendarType.history: + diagnosis = historyDiagnosis; + break; + case ClientCalendarType.compare: + diagnosis = compareDiagnoses[(index ?? 0) % compareDiagnoses.length]; + break; + case ClientCalendarType.trend: + break; + } + if (diagnosis == null) return false; + return diagnosis.startTime.year == date.year && + diagnosis.startTime.month == date.month && + diagnosis.startTime.day == date.day; + } + + List findDiagnosesWithDate(DateTime date) { + List temp = diagnoses; + temp = temp + .where((diagnosis) => + diagnosis.startTime.year == date.year && + diagnosis.startTime.month == date.month && + diagnosis.startTime.day == date.day) + .toList(); + return temp; + } + + void selectDiagnosis(Diagnosis diagnosis, ClientCalendarType type, + {int? index}) { + switch (type) { + case ClientCalendarType.history: + historyDiagnosis = + (isSelectedDiagnosis(diagnosis, type)) ? null : diagnosis; + break; + case ClientCalendarType.compare: + compareDiagnoses[(index ?? 0) % compareDiagnoses.length] = + (isSelectedDiagnosis(diagnosis, type, index: index)) + ? null + : diagnosis; + break; + case ClientCalendarType.trend: + break; + } + notifyListeners(); + } + + bool isSelectedDiagnosis(Diagnosis diagnosis, ClientCalendarType type, + {int? index}) { + switch (type) { + case ClientCalendarType.history: + if (historyDiagnosis == null) return false; + return historyDiagnosis!.id == diagnosis.id; + case ClientCalendarType.compare: + if (compareDiagnoses[(index ?? 0) % compareDiagnoses.length] == null) { + return false; + } + return compareDiagnoses[(index ?? 0) % compareDiagnoses.length]!.id == + diagnosis.id; + case ClientCalendarType.trend: + return false; + } + } + + List getDisgnosesFromTimeRange( + DateTime fromDateTime, DateTime toDateTime) { + List temp = []; + int count = toDateTime.difference(fromDateTime).inDays + 1; + for (int i = 0; i < count; i++) { + DateTime dateTime = fromDateTime.add(Duration(days: i)); + List dateTimeDiagnoses = diagnoses + .where((diagnosis) => + diagnosis.startTime.year == dateTime.year && + diagnosis.startTime.month == dateTime.month && + diagnosis.startTime.day == dateTime.day) + .toList(); + if (dateTimeDiagnoses.isNotEmpty) { + temp.add(dateTimeDiagnoses.first); + } + } + return temp; + } +} diff --git a/lib/Provider/User/Client/client_provider.dart b/lib/Provider/User/Client/client_provider.dart new file mode 100644 index 0000000..534a424 --- /dev/null +++ b/lib/Provider/User/Client/client_provider.dart @@ -0,0 +1,80 @@ +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/User/client.dart'; +import 'package:lamiter/Page/create_edit_client_page.dart'; +import 'package:lamiter/Provider/User/user_provider.dart'; + +class ClientProvider extends UserProvider { + late Client? self; + late String name; + late bool gender; + late DateTime birthday; + late String? photo; + late String? note; + + ClientProvider() { + init(); + } + + @override + void init() { + self = null; + name = ''; + gender = false; + birthday = DateTime.now(); + photo = null; + note = null; + } + + Future start(Client client) async { + self = client; + name = client.name; + gender = client.gender; + birthday = client.birthday!; + photo = client.photo; + note = client.note; + notifyListeners(); + } + + @override + Future refresh() async { + final res = await API().get_client(self!.id!); + if (!res.containsKey("success")) return; + final client = Client.fromJson(res["success"]); + self = client; + name = client.name; + gender = client.gender; + birthday = client.birthday!; + photo = client.photo; + note = client.note; + notifyListeners(); + } + + @override + Future edit(BuildContext context) async { + await Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => CreateEditClientPage(client: self), + ), + ); + await refresh(); + } + + @override + Future logout(BuildContext context) async { + self!.lastUpdateTime = DateTime.now(); + // update client to db + init(); + Navigator.pop(context); + } + + @override + Future navigate(BuildContext context, Widget page) async { + await Navigator.push( + context, + CupertinoPageRoute(builder: (context) => page), + ); + await refresh(); + } +} diff --git a/lib/Provider/User/manager_provider.dart b/lib/Provider/User/manager_provider.dart new file mode 100644 index 0000000..aede4d4 --- /dev/null +++ b/lib/Provider/User/manager_provider.dart @@ -0,0 +1,115 @@ +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/UsageTimer/usage_timer.dart'; +import 'package:lamiter/Class/User/client.dart'; +import 'package:lamiter/Class/User/manager.dart'; +import 'package:lamiter/Mixin/filter.dart'; +import 'package:lamiter/Page/login_page.dart'; +import 'package:lamiter/Provider/User/user_provider.dart'; + +class ManagerProvider extends UserProvider with Filter { + late Manager? self; + late String name; + late String? photo; + late int clientMaxNumber; + late List clients; + late bool loading; + + ManagerProvider() { + init(); + } + + @override + void init() { + self = null; + name = ''; + photo = null; + clientMaxNumber = 0; + clients = []; + super.filtedList = []; + notifyListeners(); + } + + Future start(Manager manager) async { + self = manager; + name = manager.name; + photo = manager.photo; + await refresh(); + } + + @override + Future refresh() async { + updateLoading(true); + var res = await API().get_clients(self!.id!); + clients = (res["success"] ?? []) + .map((json) => Client.fromJson(json)) + .toList(); + res = await API().get_client_max_number(self!.id!); + clientMaxNumber = res["success"] ?? 0; + updateLoading(false); + filt(''); + notifyListeners(); + } + + void updateLoading(bool b) { + loading = b; + notifyListeners(); + } + + @override + Future edit(BuildContext context) async { + // await Navigator.push( + // context, + // CupertinoPageRoute( + // builder: (context) => + // CreateEditManagerPage(manager: self, isSelf: true), + // ), + // ); + // if (manager == null) return; + // // update db + // self = manager; + // refresh + refresh(); + } + + @override + Future logout(BuildContext context) async { + // self!.lastUpdateTime = DateTime.now(); + await UsageTime.instance.end(context); + Navigator.pushReplacement( + context, + CupertinoPageRoute( + builder: (context) => const LoginPage(), + ), + ); + } + + @override + Future navigate(BuildContext context, Widget page) async { + await Navigator.push( + context, + CupertinoPageRoute(builder: (context) => page), + ); + await refresh(); + } + + void filt(String keyword) { + super.filtedList = clients; + super.filtedList = filtWithKeyword(super.filtedList!, keyword); + super.filtedList = sortWithLastUpdateTime(super.filtedList!); + notifyListeners(); + } + + List findClientsWithTag(ClientTagType type) { + return filtedList + ?.where((client) => client.tag == type.index) + .map((client) => client as Client) + .toList() ?? + []; + } + + Future deleteClient(BuildContext context, String clientId) async { + await API().delete_client(self!.id!, clientId); + await refresh(); + } +} diff --git a/lib/Provider/User/user_provider.dart b/lib/Provider/User/user_provider.dart new file mode 100644 index 0000000..41670ba --- /dev/null +++ b/lib/Provider/User/user_provider.dart @@ -0,0 +1,10 @@ +import 'package:flutter/cupertino.dart'; + +abstract class UserProvider extends ChangeNotifier { + late T? self; + void init(); + Future refresh(); + Future edit(BuildContext context); + Future logout(BuildContext context); + Future navigate(BuildContext context, Widget page); +} diff --git a/lib/Provider/image_and_logo_provider.dart b/lib/Provider/image_and_logo_provider.dart new file mode 100644 index 0000000..ae4a33a --- /dev/null +++ b/lib/Provider/image_and_logo_provider.dart @@ -0,0 +1,36 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/API/api.dart'; + +class ImageAndLogoProvider extends ChangeNotifier { + String? image; + String? logo; + + ImageAndLogoProvider() { + init(); + } + + Future init() async { + image = null; + logo = null; + await refresh(); + if (image == null || logo == null) { + Timer.periodic(const Duration(seconds: 3), (timer) async { + await refresh(); + if (image != null && logo != null) timer.cancel(); + }); + } + } + + Future refresh() async { + var res = await API().get_lamiter_image(); + if (res.containsKey("success")) { + image = res["success"]; + } + res = await API().get_lamiter_logo(); + if (res.containsKey("success")) { + logo = res["success"]; + } + notifyListeners(); + } +} diff --git a/lib/Provider/login_provider.dart b/lib/Provider/login_provider.dart new file mode 100644 index 0000000..e5a4267 --- /dev/null +++ b/lib/Provider/login_provider.dart @@ -0,0 +1,120 @@ +import 'package:flutter/cupertino.dart'; +import 'package:lamiter/Class/API/api.dart'; +import 'package:lamiter/Class/User/manager.dart'; +import 'package:lamiter/Page/User/Manager/manager_page.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:provider/provider.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +enum LoginProviderAttributes { + account, + password, + isAccountLegal, + isPasswordLegal, + accountValidating, + passwordValidating, + submitting, + errorMessage +} + +class LoginProvider extends ChangeNotifier { + late String account; + late String password; + late bool isAccountLegal; + late bool isPasswordLegal; + late bool accountValidating; + late bool passwordValidating; + late bool submitting; + late String errorMessage; + + LoginProvider() { + init(); + } + + void init() { + account = ''; + password = ''; + isAccountLegal = false; + isPasswordLegal = false; + accountValidating = false; + passwordValidating = false; + submitting = false; + errorMessage = ''; + notifyListeners(); + } + + void update(LoginProviderAttributes attribute, dynamic value) { + switch (attribute) { + case LoginProviderAttributes.account: + if (value is String) account = value; + break; + case LoginProviderAttributes.password: + if (value is String) password = value; + break; + case LoginProviderAttributes.isAccountLegal: + if (value is bool) isAccountLegal = value; + break; + case LoginProviderAttributes.isPasswordLegal: + if (value is bool) isPasswordLegal = value; + break; + case LoginProviderAttributes.accountValidating: + if (value is bool) accountValidating = value; + break; + case LoginProviderAttributes.passwordValidating: + if (value is bool) passwordValidating = value; + break; + case LoginProviderAttributes.submitting: + if (value is bool) submitting = value; + break; + case LoginProviderAttributes.errorMessage: + if (value is String) errorMessage = value; + break; + } + notifyListeners(); + } + + bool isReadyToSubmit() { + return isAccountLegal && + isPasswordLegal && + !accountValidating && + !passwordValidating && + !submitting; + } + + Future submit(BuildContext context) async { + FocusManager.instance.primaryFocus?.unfocus(); + update(LoginProviderAttributes.submitting, true); + update(LoginProviderAttributes.errorMessage, ''); + + Map res = await API().login(account, password); + if (res.containsKey('success')) { + Manager manager = Manager.fromJson(res["success"]); + await context.read().start(manager); + // 登入成功 + _loginSuccess(); + Navigator.pushReplacement( + context, + CupertinoPageRoute( + builder: (context) => ManagerPage(manager: manager), + ), + ); + } else { + _loginFail(res); + } + } + + Future _loginSuccess() async { + update(LoginProviderAttributes.submitting, false); + final prefs = await SharedPreferences.getInstance(); + await prefs.setString('account', account); + await prefs.setString('password', password); + } + + Future _loginFail(Map res) async { + update(LoginProviderAttributes.submitting, false); + update(LoginProviderAttributes.errorMessage, res["errorMessage"]); + final prefs = await SharedPreferences.getInstance(); + await prefs.remove('account'); + await prefs.remove('password'); + } +} diff --git a/lib/Theme/dark_mode.dart b/lib/Theme/dark_mode.dart new file mode 100644 index 0000000..f56c44b --- /dev/null +++ b/lib/Theme/dark_mode.dart @@ -0,0 +1,17 @@ +import "package:flutter/material.dart"; + +ThemeData darkTheme = ThemeData( + appBarTheme: const AppBarTheme( + centerTitle: true, + elevation: 0, + ), + colorScheme: const ColorScheme.dark( + background: Color.fromARGB(255, 20, 20, 20), + surface: Color.fromARGB(255, 20, 20, 20), + primary: Color.fromARGB(255, 122, 122, 122), + secondary: Color.fromARGB(255, 30, 30, 30), + tertiary: Color.fromARGB(255, 47, 47, 47), + inverseSurface: Colors.white, + inversePrimary: Color.fromARGB(255, 133, 133, 133), + ), +); diff --git a/lib/Theme/light_mode.dart b/lib/Theme/light_mode.dart new file mode 100644 index 0000000..366dc2e --- /dev/null +++ b/lib/Theme/light_mode.dart @@ -0,0 +1,17 @@ +import "package:flutter/material.dart"; + +ThemeData lightTheme = ThemeData( + appBarTheme: const AppBarTheme( + centerTitle: true, + elevation: 0, + ), + colorScheme: ColorScheme.light( + background: Colors.grey.shade300, + surface: Colors.grey.shade300, + primary: Colors.grey.shade500, + secondary: Colors.grey.shade100, + tertiary: Colors.white, + inverseSurface: Colors.black, + inversePrimary: const Color(0xFF616161), + ), +); diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb new file mode 100644 index 0000000..7e409dc --- /dev/null +++ b/lib/l10n/app_zh.arb @@ -0,0 +1,127 @@ +{ + "account": "帐号", + "account_error": "帐号栏为必填。请输入完成註册的帐号。", + "affected_meridian": "受影响的经络", + "affected_zong_fu": "受影响的脏腑", + "balanced_index": "体质平衡指数", + "basic_health": "基本健康", + "basic_health_footer": "基本健康诊断工具透过多项问卷评估,包括健康指数、身体指标、疾病史、压力指数与睡眠障碍指数,全面分析客户的健康状态,协助提供相关的健康建议。", + "birthday": "生日", + "bmi_index": "体重指数(BMI)", + "bmr_index": "基础代谢率(BMR)", + "body_alert": "身体警讯", + "breakfast": "早餐", + "browse_gallery": "浏览相簿", + "cancel": "取消", + "chinese": "中文字体", + "chinese_tips": "中医小叮咛", + "client_profile": "客户档案", + "client_profile_info": "编辑客户头像、电子邮件地址、电话等资讯。", + "clients_is_empty": "没有任何客户资料。", + "constitution": "体质", + "constitution_footer": "体质诊断工具使用体质检测模型,透过上传客户的舌苔照,协助诊断客户的体质状况。脏腑分析问卷统计客户更细微的体质状况。需完成体质检涉模型,才能使用脏腑分析问卷。", + "constitution_model": "体质检测模型", + "constitution_model_info": "请选择相机拍摄或是浏览相簿,上传客户清晰的舌苔照片。系统将根据照片进行体质分析。", + "constitution_system": "体质系统", + "constitution_trend": "体质趋势", + "copy_diagnosis_report_link": "复制总评报告链接", + "copy_hospital_email": "复制院所电子邮件", + "copy_hospital_phone_number": "复制院所电话", + "copy_meridian_network_info": "复制经络穴位资讯", + "copy_success": "复制成功", + "course": "课程", + "create_client": "新增客户", + "delete_account": "删除帐号", + "delete_account_info": "删除客户帐号,以及客户的所有资料。帐号删除后将无法还原。", + "diagnosis": "诊断", + "diagnosis_and_solution": "诊断/方案", + "diagnosis_compare_report": "总评比较", + "diagnosis_report": "总评报告", + "diagnosis_trend_picture": "总评趋势图", + "dinner": "晚餐", + "display_laguage_info": "可切换简繁体中文字体。", + "display_language": "显示语言", + "edit_client_profile": "编辑客户档案", + "edit_manager_profile": "编辑个人档案", + "enter_client_home_page": "进入客户主页", + "four_season_recipe": "四季食谱", + "fundamental_care": "基本调理", + "gender": "性别", + "health_index": "健康指数", + "health_index_form": "健康指数问卷", + "health_index_form_info": "请根据问题选择与客户最相近的生活习惯。系统将根据客户的选择分析客户的健康状况。", + "healthcare_resource": "医疗资源", + "home": "主页", + "hospital_link": "院所链接", + "index": "指数", + "keyword": "关键字", + "learning_resource": "学习资源", + "login": "登入", + "logout": "登出帐号", + "logout_info": "登出管理师帐号,并返回起始页面。", + "lunch": "午餐", + "main_constitution": "主要体质", + "mall": "商城", + "matched_system": "对应系统", + "meridian_network": "经络穴位", + "meridian_network_picture": "经络穴位图", + "muscle_back_view": "肌肉背视图", + "muscle_front_view": "肌肉正视图", + "muscle_side_view": "肌肉侧视图", + "name": "姓名", + "no_diagnosis_report": "当日无总评报告", + "no_matched_meridian_network": "暂无对应经络穴位", + "no_matched_seasonal_recipe": "暂无对应节气食谱", + "no_matched_zong_fu_constitution": "暂无对应脏腑体质", + "no_related_course": "查无相关课程。", + "no_related_diagnosis": "无相关总评内容", + "no_related_product": "查无相关商品。", + "no_related_treatment": "查无相关疗程。", + "no_urban_disease": "没有疾病", + "password": "密码", + "password_error": "密码栏为必填。", + "physical_index_form": "身体指标问卷", + "physical_index_form_info": "请填入客户年龄、性别、身高(以公分为单位),以及体重(以公斤为单位)。系统将这些资讯分析客户的身体基本指标。", + "posture_issue": "体态", + "posture_issue_footer": "体态诊断工具使用体态检测模型,透过上传客户的正身照,以及侧身照,协助诊断客户的体态状况。", + "posture_issue_model": "体态检测模型", + "posture_issue_model_info": "请选择相机拍摄或是浏览相簿,上传客户清晰的正身照片、侧身照片。系统将根据照片进行体态分析。", + "posture_issue_system": "体态系统", + "posture_issue_trend": "体态趋势", + "potential_risk_disease": "可能风险疾病", + "product": "商品", + "profile": "个人档案", + "profile_info": "编辑头像、电子邮件地址、电话等个人资讯。", + "save": "储存", + "screenshot_diagnosis_report": "截图总评报告", + "screenshot_success": "截图成功", + "seasonal_recipe": "节气食谱", + "server_error": "无法连线伺服器", + "service": "服务项目", + "service_item": "配对产品", + "sign_out": "退出帐号", + "sign_out_info": "退出客户帐号,并返回管理师帐号的主页。", + "sign_up_now": "立即报名", + "sleep_well_index": "睡眠障碍指数", + "sleep_well_index_form": "睡眠障碍指数问卷", + "sleep_well_index_form_info": "请根据问题选择与客户最相近的睡眠习惯。系统将根据客户的选择分析客户的睡眠状况。", + "special_note": "特殊备註", + "stress_index": "精神压力指数", + "stress_index_form": "压力指数问卷", + "stress_index_form_info": "请根据问题选择与客户最相近的生活习惯。系统将根据客户的选择分析客户的精神压力。", + "sub_constitution": "次要体质", + "submit": "提交", + "timestamp": "时间戳记", + "treatment": "疗程", + "urban_disease_form": "都会疾病调查问卷", + "urban_disease_form_info": "请点选客户是否患有以下都会疾病。系统将纪录并保存客户的都会疾病资讯。", + "urban_disease_survey": "都会疾病调查", + "urban_syndrome_tips": "都会病症建议", + "use_camera": "相机拍摄", + "value": "数值", + "value_offset": "变化量", + "western_tips": "西医小叮咛", + "zong_fu_index_form": "脏腑分析问卷", + "zong_fu_index_form_info": "请点选客户是否有以下症状。系统将根据客户的选择分析客户的脏腑状况。", + "zong_fu_index_form_not_ready": "需完成体质检测模型" +} \ No newline at end of file diff --git a/lib/l10n/app_zh_TW.arb b/lib/l10n/app_zh_TW.arb new file mode 100644 index 0000000..d2aaebf --- /dev/null +++ b/lib/l10n/app_zh_TW.arb @@ -0,0 +1,127 @@ +{ + "account": "帳號", + "account_error": "帳號欄為必填。請輸入完成註冊的帳號。", + "affected_meridian": "受影響的經絡", + "affected_zong_fu": "受影響的臟腑", + "balanced_index": "體質平衡指數", + "basic_health": "基本健康", + "basic_health_footer": "基本健康診斷工具透過多項問卷評估,包括健康指數、身體指標、疾病史、壓力指數與睡眠障礙指數,全面分析客戶的健康狀態,協助提供相關的健康建議。", + "birthday": "生日", + "bmi_index": "體重指數(BMI)", + "bmr_index": "基礎代謝率(BMR)", + "body_alert": "身體警訊", + "breakfast": "早餐", + "browse_gallery": "瀏覽相簿", + "cancel": "取消", + "chinese": "中文字體", + "chinese_tips": "中醫小叮嚀", + "client_profile": "客戶檔案", + "client_profile_info": "編輯客戶頭像、電子郵件地址、電話等資訊。", + "clients_is_empty": "沒有任何客戶資料。", + "constitution": "體質", + "constitution_footer": "體質診斷工具使用體質檢測模型,透過上傳客戶的舌苔照,協助診斷客戶的體質狀況。臟腑分析問卷統計客戶更細微的體質狀況。需完成體質檢涉模型,才能使用臟腑分析問卷。", + "constitution_model": "體質檢測模型", + "constitution_model_info": "請選擇相機拍攝或是瀏覽相簿,上傳客戶清晰的舌苔照片。系統將根據照片進行體質分析。", + "constitution_system": "體質系統", + "constitution_trend": "體質趨勢", + "copy_diagnosis_report_link": "複製總評報告連結", + "copy_hospital_email": "複製院所電子郵件", + "copy_hospital_phone_number": "複製院所電話", + "copy_meridian_network_info": "複製經絡穴位資訊", + "copy_success": "複製成功", + "course": "課程", + "create_client": "新增客戶", + "delete_account": "刪除帳號", + "delete_account_info": "刪除客戶帳號,以及客戶的所有資料。帳號刪除後將無法還原。", + "diagnosis": "診斷", + "diagnosis_and_solution": "診斷/方案", + "diagnosis_compare_report": "總評比較", + "diagnosis_report": "總評報告", + "diagnosis_trend_picture": "總評趨勢圖", + "dinner": "晚餐", + "display_laguage_info": "可切換簡繁體中文字體。", + "display_language": "顯示語言", + "edit_client_profile": "編輯客戶檔案", + "edit_manager_profile": "編輯個人檔案", + "enter_client_home_page": "進入客戶主頁", + "four_season_recipe": "四季食譜", + "fundamental_care": "基本調理", + "gender": "性別", + "health_index": "健康指數", + "health_index_form": "健康指數問卷", + "health_index_form_info": "請根據問題選擇與客戶最相近的生活習慣。系統將根據客戶的選擇分析客戶的健康狀況。", + "healthcare_resource": "醫療資源", + "home": "主頁", + "hospital_link": "院所連結", + "index": "指數", + "keyword": "關鍵字", + "learning_resource": "學習資源", + "login": "登入", + "logout": "登出帳號", + "logout_info": "登出管理師帳號,並返回起始頁面。", + "lunch": "午餐", + "main_constitution": "主要體質", + "mall": "商城", + "matched_system": "對應系統", + "meridian_network": "經絡穴位", + "meridian_network_picture": "經絡穴位圖", + "muscle_back_view": "肌肉背視圖", + "muscle_front_view": "肌肉正視圖", + "muscle_side_view": "肌肉側視圖", + "name": "姓名", + "no_diagnosis_report": "當日無總評報告", + "no_matched_meridian_network": "暫無對應經絡穴位", + "no_matched_seasonal_recipe": "暫無對應節氣食譜", + "no_matched_zong_fu_constitution": "暫無對應臟腑體質", + "no_related_course": "查無相關課程。", + "no_related_diagnosis": "無相關總評內容", + "no_related_product": "查無相關商品。", + "no_related_treatment": "查無相關療程。", + "no_urban_disease": "沒有疾病", + "password": "密碼", + "password_error": "密碼欄為必填。", + "physical_index_form": "身體指標問卷", + "physical_index_form_info": "請填入客戶年齡、性別、身高(以公分為單位),以及體重(以公斤為單位)。系統將這些資訊分析客戶的身體基本指標。", + "posture_issue": "體態", + "posture_issue_footer": "體態診斷工具使用體態檢測模型,透過上傳客戶的正身照,以及側身照,協助診斷客戶的體態狀況。", + "posture_issue_model": "體態檢測模型", + "posture_issue_model_info": "請選擇相機拍攝或是瀏覽相簿,上傳客戶清晰的正身照片、側身照片。系統將根據照片進行體態分析。", + "posture_issue_system": "體態系統", + "posture_issue_trend": "體態趨勢", + "potential_risk_disease": "可能風險疾病", + "product": "商品", + "profile": "個人檔案", + "profile_info": "編輯頭像、電子郵件地址、電話等個人資訊。", + "save": "儲存", + "screenshot_diagnosis_report": "截圖總評報告", + "screenshot_success": "截圖成功", + "seasonal_recipe": "節氣食譜", + "server_error": "無法連線伺服器", + "service": "服務項目", + "service_item": "配對產品", + "sign_out": "退出帳號", + "sign_out_info": "退出客戶帳號,並返回管理師帳號的主頁。", + "sign_up_now": "立即報名", + "sleep_well_index": "睡眠障礙指數", + "sleep_well_index_form": "睡眠障礙指數問卷", + "sleep_well_index_form_info": "請根據問題選擇與客戶最相近的睡眠習慣。系統將根據客戶的選擇分析客戶的睡眠狀況。", + "special_note": "特殊備註", + "stress_index": "精神壓力指數", + "stress_index_form": "壓力指數問卷", + "stress_index_form_info": "請根據問題選擇與客戶最相近的生活習慣。系統將根據客戶的選擇分析客戶的精神壓力。", + "sub_constitution": "次要體質", + "submit": "提交", + "timestamp": "時間戳記", + "treatment": "療程", + "urban_disease_form": "都會疾病調查問卷", + "urban_disease_form_info": "請點選客戶是否患有以下都會疾病。系統將紀錄並保存客戶的都會疾病資訊。", + "urban_disease_survey": "都會疾病調查", + "urban_syndrome_tips": "都會病症建議", + "use_camera": "相機拍攝", + "value": "數值", + "value_offset": "變化量", + "western_tips": "西醫小叮嚀", + "zong_fu_index_form": "臟腑分析問卷", + "zong_fu_index_form_info": "請點選客戶是否有以下症狀。系統將根據客戶的選擇分析客戶的臟腑狀況。", + "zong_fu_index_form_not_ready": "需完成體質檢測模型" +} \ No newline at end of file diff --git a/lib/l10n/l10n.dart b/lib/l10n/l10n.dart new file mode 100644 index 0000000..7421f56 --- /dev/null +++ b/lib/l10n/l10n.dart @@ -0,0 +1,13 @@ +import 'dart:ui'; + +class L10n { + static const List locales = [ + Locale('zh'), + Locale('zh', 'TW'), + ]; + + static const List languages = [ + '简体中文', + '繁體中文', + ]; +} diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..5dbae8b --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,141 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:lamiter/Component/loading.dart'; +import 'package:lamiter/Page/login_page.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/zong_fu_organ_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/diagnosis_provider.dart'; +import 'package:lamiter/Provider/Form/constitution_form_provider.dart'; +import 'package:lamiter/Provider/Form/create_edit_client_form_provider.dart'; +import 'package:lamiter/Provider/Form/health_index_form_provider.dart'; +import 'package:lamiter/Provider/Form/physical_index_form_provider.dart'; +import 'package:lamiter/Provider/Form/posture_issue_form_provider.dart'; +import 'package:lamiter/Provider/Form/sleep_well_index_form_provider.dart'; +import 'package:lamiter/Provider/Form/stress_index_form_provider.dart'; +import 'package:lamiter/Provider/Form/urban_disease_form_provider.dart'; +import 'package:lamiter/Provider/Form/zong_fu_index_form_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/constitution_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/urban_disease_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/posture_issue_provider.dart'; +import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/symptom_provider.dart'; +import 'package:lamiter/Provider/Language/language_provider.dart'; +import 'package:lamiter/Provider/Service/MedicalFacility/medical_facility_provider.dart'; +import 'package:lamiter/Provider/Service/course_provider.dart'; +import 'package:lamiter/Provider/Service/treatment_provider.dart'; +import 'package:lamiter/Provider/User/Client/client_calendar_provider.dart'; +import 'package:lamiter/Provider/User/Client/client_provider.dart'; +import 'package:lamiter/Provider/Service/SeasonalRacipe/constitution_seasonal_recipe_provider.dart'; +import 'package:lamiter/Provider/image_and_logo_provider.dart'; +import 'package:lamiter/Provider/login_provider.dart'; +import 'package:lamiter/Provider/User/manager_provider.dart'; +import 'package:lamiter/Provider/Service/product_provider.dart'; +import 'package:lamiter/Theme/light_mode.dart'; +import 'package:lamiter/l10n/l10n.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +void main() async { + runApp( + MultiProvider( + providers: [ + ChangeNotifierProvider(create: (_) => LanguageProvider()), + ], + child: const MyApp(), + ), + ); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) { + ScreenUtil.init(context); + + final locale = context + .select((provider) => provider.locale); + + return MultiProvider( + providers: [ + ChangeNotifierProvider(create: (context) => ImageAndLogoProvider()), + ChangeNotifierProvider(create: (context) => LoginProvider()), + ChangeNotifierProvider(create: (context) => ManagerProvider()), + ChangeNotifierProvider(create: (context) => ClientProvider()), + ChangeNotifierProvider(create: (context) => ClientCalendarProvider()), + ChangeNotifierProvider(create: (context) => UrbanDiseaseProvider()), + ChangeNotifierProvider(create: (context) => ConstitutionProvider()), + ChangeNotifierProvider(create: (context) => ZongFuOrganProvider()), + ChangeNotifierProvider(create: (context) => PostureIssueProvider()), + ChangeNotifierProvider(create: (context) => SymptomProvider()), + ChangeNotifierProvider( + create: (context) => CreateEditClientFormProvider()), + ChangeNotifierProvider(create: (context) => DiagnosisProvider()), + ChangeNotifierProvider(create: (context) => HealthIndexFormProvider()), + ChangeNotifierProvider( + create: (context) => PhysicalIndexFormProvider()), + ChangeNotifierProvider(create: (context) => UrbanDiseaseFormProvider()), + ChangeNotifierProvider(create: (context) => StressIndexFormProvider()), + ChangeNotifierProvider( + create: (context) => SleepWellIndexFormProvider()), + ChangeNotifierProvider(create: (context) => ConstitutionFormProvider()), + ChangeNotifierProvider(create: (context) => ZongFuIndexFormProvider()), + ChangeNotifierProvider(create: (context) => PostureIssueFormProvider()), + ChangeNotifierProvider(create: (context) => ProductProvider()), + ChangeNotifierProvider(create: (context) => TreatmentProvider()), + ChangeNotifierProvider(create: (context) => CourseProvider()), + ChangeNotifierProvider(create: (context) => MedicalFacilityProvider()), + ChangeNotifierProvider( + create: (context) => ConstitutionSeasonalRecipeProvider()) + ], + child: MaterialApp( + title: 'Lamiter', + supportedLocales: L10n.locales, + locale: locale, + theme: lightTheme, + debugShowCheckedModeBanner: false, + localizationsDelegates: const [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + routes: { + '/': (context) => _LoadingScreen(), + }, + ), + ); + } +} + +class _LoadingScreen extends StatelessWidget { + @override + Widget build(BuildContext context) { + final _image_and_logo_provider = Provider.of(context); + final _constitution_provider = Provider.of(context); + final _zong_fu_organ_provider = Provider.of(context); + final _posture_issue_provider = Provider.of(context); + final _symptom_provider = Provider.of(context); + final _urban_disease_provider = Provider.of(context); + + // 如果 provider 還沒載入,顯示 Loading 畫面 + if (_constitution_provider.elements.isEmpty || + _zong_fu_organ_provider.elements.isEmpty || + _posture_issue_provider.elements.isEmpty || + _urban_disease_provider.elements.isEmpty || + _symptom_provider.elements.isEmpty || + _image_and_logo_provider.image == null || + _image_and_logo_provider.logo == null) { + return const Scaffold(body: Loading()); + } + + // 當 provider 有資料後,進入主頁 + return _MainScreen(); + } +} + +class _MainScreen extends StatelessWidget { + @override + Widget build(BuildContext context) { + return const LoginPage(); + } +} diff --git a/linux/.gitignore b/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..4e79bde --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,145 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "lamiter") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.lamiter.lamiter") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/linux/flutter/CMakeLists.txt b/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..64a0ece --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); + file_selector_plugin_register_with_registrar(file_selector_linux_registrar); +} diff --git a/linux/flutter/generated_plugin_registrant.h b/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..2db3c22 --- /dev/null +++ b/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + file_selector_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/linux/main.cc b/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/linux/my_application.cc b/linux/my_application.cc new file mode 100644 index 0000000..b7a8235 --- /dev/null +++ b/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "lamiter"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "lamiter"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/linux/my_application.h b/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/macos/.gitignore b/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..4b81f9b --- /dev/null +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..5caa9d1 --- /dev/null +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..4b4e1ac --- /dev/null +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,16 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import file_selector_macos +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/macos/Podfile b/macos/Podfile new file mode 100644 index 0000000..c795730 --- /dev/null +++ b/macos/Podfile @@ -0,0 +1,43 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/macos/Podfile.lock b/macos/Podfile.lock new file mode 100644 index 0000000..abd4628 --- /dev/null +++ b/macos/Podfile.lock @@ -0,0 +1,22 @@ +PODS: + - file_selector_macos (0.0.1): + - FlutterMacOS + - FlutterMacOS (1.0.0) + +DEPENDENCIES: + - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + +EXTERNAL SOURCES: + file_selector_macos: + :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos + FlutterMacOS: + :path: Flutter/ephemeral + +SPEC CHECKSUMS: + file_selector_macos: cc3858c981fe6889f364731200d6232dac1d812d + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + +PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 + +COCOAPODS: 1.15.2 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..3b552c9 --- /dev/null +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 5DC5AAFE1E0EE5FB4B95F769 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6631F846A8D444406CEC506D /* Pods_Runner.framework */; }; + F606A76E67F9F625DC64F180 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 361ECF2BB55A94D498ECC0D1 /* Pods_RunnerTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1C764C26B3700630DED148AD /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* lamiter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = lamiter.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 361ECF2BB55A94D498ECC0D1 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5A5BF276BBDC85947DA8FD98 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 6631F846A8D444406CEC506D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 671A943B5759A3951D807A8C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7FDC4E0DD6767302485CF4FE /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 9DB60B207E78FC4BD4AD43EB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DD18331E623A1A98055234C7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F606A76E67F9F625DC64F180 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5DC5AAFE1E0EE5FB4B95F769 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + E8E1319BB621EB534C214361 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* lamiter.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6631F846A8D444406CEC506D /* Pods_Runner.framework */, + 361ECF2BB55A94D498ECC0D1 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E8E1319BB621EB534C214361 /* Pods */ = { + isa = PBXGroup; + children = ( + 5A5BF276BBDC85947DA8FD98 /* Pods-Runner.debug.xcconfig */, + DD18331E623A1A98055234C7 /* Pods-Runner.release.xcconfig */, + 9DB60B207E78FC4BD4AD43EB /* Pods-Runner.profile.xcconfig */, + 671A943B5759A3951D807A8C /* Pods-RunnerTests.debug.xcconfig */, + 7FDC4E0DD6767302485CF4FE /* Pods-RunnerTests.release.xcconfig */, + 1C764C26B3700630DED148AD /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 76F4A1C6F260B1B5E05FE6AC /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 55C1EA55756129207F4531AF /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + E4704EE1343863851E4138F0 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* lamiter.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 55C1EA55756129207F4531AF /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 76F4A1C6F260B1B5E05FE6AC /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E4704EE1343863851E4138F0 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 671A943B5759A3951D807A8C /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.lamiter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/lamiter.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/lamiter"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7FDC4E0DD6767302485CF4FE /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.lamiter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/lamiter.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/lamiter"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1C764C26B3700630DED148AD /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.lamiter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/lamiter.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/lamiter"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..3c9571f --- /dev/null +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000..82b6f9d Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000..13b35eb Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000..0a3f5fa Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000..bdb5722 Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 0000000..f083318 Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000..326c0e7 Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000..2f1632c Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/macos/Runner/Base.lproj/MainMenu.xib b/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..80e867a --- /dev/null +++ b/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..19303d0 --- /dev/null +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = lamiter + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.lamiter.lamiter + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.lamiter. All rights reserved. diff --git a/macos/Runner/Configs/Debug.xcconfig b/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Release.xcconfig b/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Warnings.xcconfig b/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/macos/Runner/MainFlutterWindow.swift b/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/macos/RunnerTests/RunnerTests.swift b/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..61f3bd1 --- /dev/null +++ b/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..2e006ae --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,767 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: "0c64e928dcbefddecd234205422bcfc2b5e6d31be0b86fef0d0dd48d7b4c9742" + url: "https://pub.dev" + source: hosted + version: "4.0.4" + async: + dependency: transitive + description: + name: async + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + url: "https://pub.dev" + source: hosted + version: "2.12.0" + barcode: + dependency: transitive + description: + name: barcode + sha256: "7b6729c37e3b7f34233e2318d866e8c48ddb46c1f7ad01ff7bb2a8de1da2b9f4" + url: "https://pub.dev" + source: hosted + version: "2.2.9" + bidi: + dependency: transitive + description: + name: bidi + sha256: "9a712c7ddf708f7c41b1923aa83648a3ed44cfd75b04f72d598c45e5be287f9d" + url: "https://pub.dev" + source: hosted + version: "2.0.12" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + bounce: + dependency: "direct main" + description: + name: bounce + sha256: c213b754bf1c6d6793dea93e621c6e309ab07543aa1208351e0c7297a1fbafce + url: "https://pub.dev" + source: hosted + version: "1.0.2" + characters: + dependency: transitive + description: + name: characters + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + equatable: + dependency: transitive + description: + name: equatable + sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" + url: "https://pub.dev" + source: hosted + version: "2.0.7" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + url: "https://pub.dev" + source: hosted + version: "1.3.2" + ffi: + dependency: transitive + description: + name: ffi + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + url: "https://pub.dev" + source: hosted + version: "0.9.4+2" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" + url: "https://pub.dev" + source: hosted + version: "0.9.3+4" + fl_chart: + dependency: "direct main" + description: + name: fl_chart + sha256: "74959b99b92b9eebeed1a4049426fd67c4abc3c5a0f4d12e2877097d6a11ae08" + url: "https://pub.dev" + source: hosted + version: "0.69.2" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_animate: + dependency: "direct main" + description: + name: flutter_animate + sha256: "7befe2d3252728afb77aecaaea1dec88a89d35b9b1d2eea6d04479e8af9117b5" + url: "https://pub.dev" + source: hosted + version: "4.5.2" + flutter_animated_button: + dependency: "direct main" + description: + name: flutter_animated_button + sha256: "340770308cf72cfc380c421727d98691bb12a5596871954f289b0bafdd356256" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + flutter_keyboard_visibility: + dependency: "direct main" + description: + name: flutter_keyboard_visibility + sha256: "98664be7be0e3ffca00de50f7f6a287ab62c763fc8c762e0a21584584a3ff4f8" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "5a1e6fb2c0561958d7e4c33574674bda7b77caaca7a33b758876956f2902eea3" + url: "https://pub.dev" + source: hosted + version: "2.0.27" + flutter_screenutil: + dependency: "direct main" + description: + name: flutter_screenutil + sha256: "8239210dd68bee6b0577aa4a090890342d04a136ce1c81f98ee513fc0ce891de" + url: "https://pub.dev" + source: hosted + version: "5.9.3" + flutter_shaders: + dependency: transitive + description: + name: flutter_shaders + sha256: "34794acadd8275d971e02df03afee3dee0f98dbfb8c4837082ad0034f612a3e2" + url: "https://pub.dev" + source: hosted + version: "0.1.3" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_to_pdf: + dependency: "direct main" + description: + name: flutter_to_pdf + sha256: b2efabdabb30cbbfef14623ec101f44261b69cafca993edce31902f7c712ce6f + url: "https://pub.dev" + source: hosted + version: "0.2.3" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + http: + dependency: "direct main" + description: + name: http + sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f + url: "https://pub.dev" + source: hosted + version: "1.3.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + image: + dependency: "direct main" + description: + name: image + sha256: "13d3349ace88f12f4a0d175eb5c12dcdd39d35c4c109a8a13dfeb6d0bd9e31c3" + url: "https://pub.dev" + source: hosted + version: "4.5.3" + image_gallery_saver: + dependency: "direct main" + description: + name: image_gallery_saver + sha256: "0aba74216a4d9b0561510cb968015d56b701ba1bd94aace26aacdd8ae5761816" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8bd392ba8b0c8957a157ae0dc9fcf48c58e6c20908d5880aea1d79734df090e9" + url: "https://pub.dev" + source: hosted + version: "0.8.12+22" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "05da758e67bc7839e886b3959848aa6b44ff123ab4b28f67891008afe8ef9100" + url: "https://pub.dev" + source: hosted + version: "0.8.12+2" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "1b90ebbd9dcf98fb6c1d01427e49a55bd96b5d67b8c67cf955d60a5de74207c1" + url: "https://pub.dev" + source: hosted + version: "0.2.1+2" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "886d57f0be73c4b140004e78b9f28a8914a09e50c2d816bdd0520051a71236a0" + url: "https://pub.dev" + source: hosted + version: "2.10.1" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + intl: + dependency: "direct main" + description: + name: intl + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" + source: hosted + version: "0.19.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + url: "https://pub.dev" + source: hosted + version: "10.0.8" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + url: "https://pub.dev" + source: hosted + version: "3.0.9" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + url: "https://pub.dev" + source: hosted + version: "0.12.17" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" + meta: + dependency: transitive + description: + name: meta + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + url: "https://pub.dev" + source: hosted + version: "1.16.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "0ca7359dad67fd7063cb2892ab0c0737b2daafd807cf1acecd62374c8fae6c12" + url: "https://pub.dev" + source: hosted + version: "2.2.16" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + pdf: + dependency: transitive + description: + name: pdf + sha256: "28eacad99bffcce2e05bba24e50153890ad0255294f4dd78a17075a2ba5c8416" + url: "https://pub.dev" + source: hosted + version: "3.11.3" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + pinyin: + dependency: "direct main" + description: + name: pinyin + sha256: "240f271a3c71af20c8d2757756b5ee8e9d79a955d37abad4b3568fd406b22411" + url: "https://pub.dev" + source: hosted + version: "3.3.0" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + posix: + dependency: transitive + description: + name: posix + sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + url: "https://pub.dev" + source: hosted + version: "6.0.1" + provider: + dependency: "direct main" + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + qr: + dependency: transitive + description: + name: qr + sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a" + url: "https://pub.dev" + source: hosted + version: "2.5.2" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "3ec7210872c4ba945e3244982918e502fa2bfb5230dff6832459ca0e1879b7ad" + url: "https://pub.dev" + source: hosted + version: "2.4.8" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" + url: "https://pub.dev" + source: hosted + version: "2.5.4" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 + url: "https://pub.dev" + source: hosted + version: "2.4.3" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + url: "https://pub.dev" + source: hosted + version: "1.10.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + url: "https://pub.dev" + source: hosted + version: "0.7.4" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + url: "https://pub.dev" + source: hosted + version: "14.3.1" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + widgets_to_image: + dependency: "direct main" + description: + name: widgets_to_image + sha256: "9a251b95d3a9f10d72420dde9b7e3b0da5eddd47fb19cad066bc68c60b0d1dfb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" +sdks: + dart: ">=3.7.0 <4.0.0" + flutter: ">=3.27.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..849b58b --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,121 @@ +name: lamiter +description: 'A new Flutter project.' +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=3.4.3 <4.0.0' + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + flutter_localizations: + sdk: flutter + + cupertino_icons: ^1.0.6 + flutter_screenutil: ^5.9.3 + provider: ^6.1.2 + flutter_animated_button: ^2.0.3 + image_picker: ^1.1.2 + flutter_keyboard_visibility: ^6.0.0 + flutter_animate: ^4.5.1 + fl_chart: ^0.69.2 + bounce: ^1.0.2 + http: ^1.2.2 + widgets_to_image: ^1.0.0 + image_gallery_saver: ^2.0.3 + flutter_to_pdf: ^0.2.2 + path_provider: ^2.1.5 + image: ^4.3.0 + pinyin: ^3.3.0 + intl: 0.19.0 + shared_preferences: ^2.3.3 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^3.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + generate: true + + # To add assets to your application, add an assets section, like this: + assets: + - assets/default_error.png + - assets/x_ray/forward_head_posture/ + - assets/x_ray/head_tilt/ + - assets/x_ray/hyperextended_knee/ + - assets/x_ray/o_legs/ + - assets/x_ray/pelvic_tilt/ + - assets/x_ray/rounded_shoulders/ + - assets/x_ray/spinal_misalignment/ + - assets/x_ray/uneven_shoulders/ + - assets/x_ray/x_legs/ + - assets/x_ray/xo_legs/ + - assets/muscles/front/ + - assets/muscles/side_left/ + - assets/muscles/side_right/ + - assets/muscles/back/ + - assets/zong_fu_organs/ + - assets/meridians/ + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..061bc29 --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:lamiter/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/web/favicon.png b/web/favicon.png new file mode 100644 index 0000000..8aaa46a Binary files /dev/null and b/web/favicon.png differ diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png new file mode 100644 index 0000000..b749bfe Binary files /dev/null and b/web/icons/Icon-192.png differ diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png new file mode 100644 index 0000000..88cfd48 Binary files /dev/null and b/web/icons/Icon-512.png differ diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000..eb9b4d7 Binary files /dev/null and b/web/icons/Icon-maskable-192.png differ diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000..d69c566 Binary files /dev/null and b/web/icons/Icon-maskable-512.png differ diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..ddfd60f --- /dev/null +++ b/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + lamiter + + + + + + diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..43b92ad --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "lamiter", + "short_name": "lamiter", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/windows/.gitignore b/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt new file mode 100644 index 0000000..4dc692a --- /dev/null +++ b/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(lamiter LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "lamiter") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..903f489 --- /dev/null +++ b/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..77ab7a0 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + FileSelectorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FileSelectorWindows")); +} diff --git a/windows/flutter/generated_plugin_registrant.h b/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..a423a02 --- /dev/null +++ b/windows/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + file_selector_windows +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc new file mode 100644 index 0000000..247e142 --- /dev/null +++ b/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.lamiter" "\0" + VALUE "FileDescription", "lamiter" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "lamiter" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.lamiter. All rights reserved." "\0" + VALUE "OriginalFilename", "lamiter.exe" "\0" + VALUE "ProductName", "lamiter" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/windows/runner/flutter_window.cpp b/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..955ee30 --- /dev/null +++ b/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/windows/runner/flutter_window.h b/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp new file mode 100644 index 0000000..0e7bbb5 --- /dev/null +++ b/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"lamiter", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/windows/runner/resource.h b/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000..c04e20c Binary files /dev/null and b/windows/runner/resources/app_icon.ico differ diff --git a/windows/runner/runner.exe.manifest b/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..a42ea76 --- /dev/null +++ b/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/windows/runner/utils.cpp b/windows/runner/utils.cpp new file mode 100644 index 0000000..3a0b465 --- /dev/null +++ b/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/windows/runner/utils.h b/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/windows/runner/win32_window.cpp b/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/windows/runner/win32_window.h b/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_