Browse Source

first commit

liukai 4 months ago
commit
767dd9b6b5
100 changed files with 3229 additions and 0 deletions
  1. 31 0
      .gitignore
  2. 10 0
      .metadata
  3. 2 0
      README.md
  4. 29 0
      analysis_options.yaml
  5. 78 0
      app/.gitignore
  6. 13 0
      app/android/.gitignore
  7. 126 0
      app/android/app/build.gradle
  8. 159 0
      app/android/app/proguard-rules.pro
  9. 144 0
      app/android/app/src/main/AndroidManifest.xml
  10. 86 0
      app/android/app/src/main/kotlin/com/hongyegroup/property_management/MainActivity.java
  11. 13 0
      app/android/app/src/main/kotlin/com/hongyegroup/property_management/MyApplication.kt
  12. 48 0
      app/android/app/src/main/kotlin/com/hongyegroup/property_management/RouterActivity.java
  13. 11 0
      app/android/app/src/main/res/drawable-v21/launch_background.xml
  14. BIN
      app/android/app/src/main/res/drawable-xhdpi/yy_business_top_logo.webp
  15. BIN
      app/android/app/src/main/res/drawable-xxhdpi/yy_business_top_logo.webp
  16. 11 0
      app/android/app/src/main/res/drawable/launch_background.xml
  17. 12 0
      app/android/app/src/main/res/drawable/shape_page_bg.xml
  18. 5 0
      app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  19. 5 0
      app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  20. BIN
      app/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp
  21. BIN
      app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
  22. BIN
      app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
  23. BIN
      app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
  24. BIN
      app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
  25. BIN
      app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
  26. BIN
      app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
  27. BIN
      app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
  28. BIN
      app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
  29. 20 0
      app/android/app/src/main/res/values-night/styles.xml
  30. 13 0
      app/android/app/src/main/res/values-v31/styles.xml
  31. 4 0
      app/android/app/src/main/res/values/ic_launcher_background.xml
  32. 19 0
      app/android/app/src/main/res/values/styles.xml
  33. 9 0
      app/android/app/src/main/res/xml/network_security_config.xml
  34. 18 0
      app/android/build.gradle
  35. 4 0
      app/android/gradle.properties
  36. 6 0
      app/android/gradle/wrapper/gradle-wrapper.properties
  37. 4 0
      app/android/key.properties
  38. BIN
      app/android/key/yyemployer.jks
  39. 25 0
      app/android/settings.gradle
  40. 34 0
      app/ios/.gitignore
  41. 26 0
      app/ios/Flutter/AppFrameworkInfo.plist
  42. 2 0
      app/ios/Flutter/Debug.xcconfig
  43. 2 0
      app/ios/Flutter/Release.xcconfig
  44. 10 0
      app/ios/Gemfile
  45. 86 0
      app/ios/Podfile
  46. 624 0
      app/ios/Runner.xcodeproj/project.pbxproj
  47. 7 0
      app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  48. 8 0
      app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  49. 8 0
      app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  50. 87 0
      app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  51. 10 0
      app/ios/Runner.xcworkspace/contents.xcworkspacedata
  52. 8 0
      app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  53. 8 0
      app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  54. 114 0
      app/ios/Runner/AppDelegate.swift
  55. BIN
      app/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png
  56. 14 0
      app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
  57. 6 0
      app/ios/Runner/Assets.xcassets/Contents.json
  58. 22 0
      app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
  59. BIN
      app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
  60. BIN
      app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
  61. 21 0
      app/ios/Runner/Assets.xcassets/logo.imageset/Contents.json
  62. BIN
      app/ios/Runner/Assets.xcassets/logo.imageset/logo.png
  63. 51 0
      app/ios/Runner/Base.lproj/LaunchScreen.storyboard
  64. 26 0
      app/ios/Runner/Base.lproj/Main.storyboard
  65. 42 0
      app/ios/Runner/GradientView.swift
  66. 101 0
      app/ios/Runner/Info.plist
  67. BIN
      app/ios/Runner/LaunchBG@2x.png
  68. BIN
      app/ios/Runner/LaunchBG@3x.png
  69. 1 0
      app/ios/Runner/Runner-Bridging-Header.h
  70. 18 0
      app/ios/Runner/Runner.entitlements
  71. 1 0
      app/ios/Runner/th.lproj/LaunchScreen.strings
  72. 1 0
      app/ios/Runner/th.lproj/Main.strings
  73. 1 0
      app/ios/Runner/vi.lproj/LaunchScreen.strings
  74. 1 0
      app/ios/Runner/vi.lproj/Main.strings
  75. 1 0
      app/ios/Runner/zh-HK.lproj/LaunchScreen.strings
  76. 1 0
      app/ios/Runner/zh-HK.lproj/Main.strings
  77. 1 0
      app/ios/Runner/zh-Hans.lproj/LaunchScreen.strings
  78. 1 0
      app/ios/Runner/zh-Hans.lproj/Main.strings
  79. 11 0
      app/ios/apple-app-site-association.plist
  80. 6 0
      app/ios/fastlane/Appfile
  81. 54 0
      app/ios/fastlane/Fastfile
  82. 6 0
      app/ios/fastlane/Pluginfile
  83. 32 0
      app/ios/fastlane/README.md
  84. 28 0
      app/ios/fastlane/report.xml
  85. 88 0
      app/lib/jpush/jpush_receive.dart
  86. 192 0
      app/lib/main.dart
  87. 43 0
      app/lib/modules/splash/page/splash_page.dart
  88. 15 0
      app/lib/modules/splash/vm/splash_view_model.dart
  89. 26 0
      app/lib/modules/splash/vm/splash_view_model.g.dart
  90. 15 0
      app/lib/router/app_page_router.dart
  91. 56 0
      app/lib/router/app_page_router.gr.dart
  92. 44 0
      app/lib/rp_obs/riverpod_observer.dart
  93. 115 0
      app/pubspec.yaml
  94. 40 0
      app/pubspec_overrides.yaml
  95. 11 0
      app/test/widget_test.dart
  96. 28 0
      app/web/index.html
  97. 79 0
      melos.yaml
  98. 31 0
      packages/cpt_auth/.gitignore
  99. 60 0
      packages/cpt_auth/pubspec.yaml
  100. 0 0
      packages/cpt_auth/pubspec_overrides.yaml

+ 31 - 0
.gitignore

@@ -0,0 +1,31 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+*.lock
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# Visual Studio Code related
+.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+proguardMapping.txt

+ 10 - 0
.metadata

@@ -0,0 +1,10 @@
+# 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: c860cba910319332564e1e9d470a17074c1f2dfd
+  channel: beta
+
+project_type: app

+ 2 - 0
README.md

@@ -0,0 +1,2 @@
+HongyeGroup物业管理系统
+

+ 29 - 0
analysis_options.yaml

@@ -0,0 +1,29 @@
+# This file configures the analyzer, which statically analyzes Dart code to
+# check for errors, warnings, and lints.
+#
+# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
+# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
+# invoked from the command line by running `flutter analyze`.
+
+# The following line activates a set of recommended lints for Flutter apps,
+# packages, and plugins designed to encourage good coding practices.
+include: package:flutter_lints/flutter.yaml
+
+linter:
+  # The lint rules applied to this project can be customized in the
+  # section below to disable rules from the `package:flutter_lints/flutter.yaml`
+  # included above or to enable additional rules. A list of all available lints
+  # and their documentation is published at
+  # https://dart-lang.github.io/linter/lints/index.html.
+  #
+  # Instead of disabling a lint rule for the entire project in the
+  # section below, it can also be suppressed for a single line of code
+  # or a specific dart file by using the `// ignore: name_of_lint` and
+  # `// ignore_for_file: name_of_lint` syntax on the line or in the file
+  # producing the lint.
+  rules:
+    # avoid_print: false  # Uncomment to disable the `avoid_print` rule
+    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule
+
+# Additional information about this file can be found at
+# https://dart.dev/guides/language/analysis-options

+ 78 - 0
app/.gitignore

@@ -0,0 +1,78 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+*.lock
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# Visual Studio Code related
+.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+proguardMapping.txt
+
+# Android related
+**/android/**/gradle-wrapper.jar
+**/android/.gradle
+**/android/captures/
+**/android/gradlew
+**/android/gradlew.bat
+**/android/local.properties
+**/android/**/GeneratedPluginRegistrant.java
+
+# iOS/XCode related
+**/ios/**/*.mode1v3
+**/ios/**/*.mode2v3
+**/ios/**/*.moved-aside
+**/ios/**/*.pbxuser
+**/ios/**/*.perspectivev3
+**/ios/**/*sync/
+**/ios/**/.sconsign.dblite
+**/ios/**/.tags*
+**/ios/**/.vagrant/
+**/ios/**/DerivedData/
+**/ios/**/Icon?
+**/ios/**/Pods/
+**/ios/**/.symlinks/
+**/ios/**/profile
+**/ios/**/xcuserdata
+**/ios/.generated/
+**/ios/Flutter/App.framework
+**/ios/Flutter/Flutter.framework
+**/ios/Flutter/Generated.xcconfig
+**/ios/Flutter/app.flx
+**/ios/Flutter/app.zip
+**/ios/Flutter/flutter_assets/
+**/ios/ServiceDefinitions.json
+**/ios/Runner/GeneratedPluginRegistrant.*
+**/ios/Flutter/flutter_export_environment.sh
+**/ios/Flutter/.last_build_id
+
+# Web related
+
+# Exceptions to above rules.
+!**/ios/**/default.mode1v3
+!**/ios/**/default.mode2v3
+!**/ios/**/default.pbxuser
+!**/ios/**/default.perspectivev3
+!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
+/ios/build/

+ 13 - 0
app/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

+ 126 - 0
app/android/app/build.gradle

@@ -0,0 +1,126 @@
+plugins {
+    id "com.android.application"
+    id "kotlin-android"
+    id "kotlin-kapt"
+    id "dev.flutter.flutter-gradle-plugin"
+}
+
+def keystoreProperties = new Properties()
+def keystorePropertiesFile = rootProject.file('key.properties')
+if (keystorePropertiesFile.exists()) {
+    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
+}
+
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+    localPropertiesFile.withReader('UTF-8') { reader ->
+        localProperties.load(reader)
+    }
+}
+
+def flutterRoot = localProperties.getProperty('flutter.sdk')
+if (flutterRoot == null) {
+    throw new Exception("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
+}
+
+// 模拟器运行报错时尝试开启此项
+// project.setProperty('target-platform', 'android-arm')
+
+android {
+    compileSdkVersion 34
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_11
+        targetCompatibility JavaVersion.VERSION_11
+    }
+
+    kotlinOptions {
+        jvmTarget = JavaVersion.VERSION_11
+    }
+
+    sourceSets {
+        main.java.srcDirs += 'src/main/kotlin'
+    }
+
+    lintOptions {
+        // 如打包出现Failed to transform libs.jar to match attributes
+        checkReleaseBuilds false
+    }
+
+    defaultConfig {
+        applicationId "com.hongyegroup.property_management"
+        minSdkVersion 21
+        targetSdkVersion 34
+        versionCode 100          //Android打包上线记得要加固并重新签名再传
+        versionName "1.0.0"
+
+        multiDexEnabled true
+
+        ndk {
+            //选择要添加的对应 cpu 类型的 .so 库。
+//            abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
+            abiFilters 'armeabi-v7a', 'arm64-v8a'
+//            abiFilters 'armeabi-v7a'
+//            abiFilters 'arm64-v8a'
+        }
+
+        manifestPlaceholders = [
+                JPUSH_PKGNAME   : applicationId,
+                JPUSH_APPKEY    : "1234567890",
+                JPUSH_CHANNEL   : "developer-default",
+                queryAllPackages: ""
+        ]
+    }
+
+    //配置keystore签名
+    signingConfigs {
+        release {
+            keyAlias keystoreProperties['keyAlias']
+            keyPassword keystoreProperties['keyPassword']
+            storeFile file(keystoreProperties['storeFile'])
+            storePassword keystoreProperties['storePassword']
+        }
+        debug {
+
+        }
+    }
+
+    buildTypes {
+        release {
+            signingConfig signingConfigs.release
+            //默认系统混淆
+            minifyEnabled true
+            // 不显示Log
+            buildConfigField "boolean", "LOG_DEBUG", "false"
+            //是否可调试
+            debuggable false
+            //Zipalign优化
+            zipAlignEnabled true
+            //移除无用的resource文件
+            shrinkResources true
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+        }
+        debug {
+            signingConfig signingConfigs.release
+            //是否可调试
+            debuggable true
+        }
+    }
+}
+
+flutter {
+    source '../..'
+}
+
+dependencies {
+    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0"
+    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0"
+
+    implementation 'com.github.bumptech.glide:glide:4.11.0'
+    kapt 'com.github.bumptech.glide:compiler:4.11.0'
+
+    implementation 'androidx.appcompat:appcompat:1.3.1'  //加入AndroidX依赖
+    implementation 'com.android.support:multidex:1.0.3'
+//    implementation 'androidx.core:core-splashscreen:1.0.0' //启动12兼容
+}

+ 159 - 0
app/android/app/proguard-rules.pro

@@ -0,0 +1,159 @@
+
+#---------------------------------基本指令区----------------------------------
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontskipnonpubliclibraryclassmembers
+-dontpreverify
+-verbose
+-printmapping proguardMapping.txt
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+-keepattributes *Annotation*,InnerClasses
+-keepattributes Signature
+-keepattributes SourceFile,LineNumberTable
+
+-printmapping proguardMapping.txt
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+-keepattributes *Annotation*,InnerClasses
+-keepattributes Signature
+-keepattributes SourceFile,LineNumberTable
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+-keep class android.support.** {*;}
+-keep public class * extends android.view.View{
+*** get*();
+void set*(***);
+public <init>(android.content.Context);
+public <init>(android.content.Context, android.util.AttributeSet);
+public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+public <init>(android.content.Context, android.util.AttributeSet);
+public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclassmembers class * implements java.io.Serializable {
+static final long serialVersionUID;
+private static final java.io.ObjectStreamField[] serialPersistentFields;
+private void writeObject(java.io.ObjectOutputStream);
+private void readObject(java.io.ObjectInputStream);
+java.lang.Object writeReplace();
+java.lang.Object readResolve();
+}
+-keep class **.R$* {
+*;
+}
+-keepclassmembers class * {
+void *(**On*Event);
+}
+-keepclassmembers class fqcn.of.javascript.interface.for.Webview {
+public *;
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+public void *(android.webkit.WebView, java.lang.String,
+android.graphics.Bitmap);
+public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+public void *(android.webkit.WebView, jav.lang.String);
+}
+
+#---------------------------------默认保留区---------------------------------
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep class android.support.** {*;}
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keep class * implements android.os.Parcelable {
+  public static final android.os.Parcelable$Creator *;
+}
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+
+-keep class android.support.** { *; }
+-keep interface android.support.** { *; }
+-keep class com.actionbarsherlock.** { *; }
+-keep interface com.actionbarsherlock.** { *; }
+-renamesourcefileattribute SourceFile
+
+-keep class **.R$* {
+ *;
+}
+
+-ignorewarnings
+
+-keep class * {
+    public private *;
+}
+
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+-dontwarn javax.annotation.**
+-dontwarn javax.inject.**
+
+
+-dontwarn com.google.**
+-keep class com.google.gson.** {*;}
+-keep class com.google.protobuf.** {*;}
+-keep class androidx.arch.core.** { *; }
+
+
+-keep class net.sqlcipher.** { *; }
+-keep class net.sqlcipher.database.** { *; }
+-keep class io.flutter.app.** { *; }
+-keep class io.flutter.plugin.**  { *; }
+-keep class io.flutter.util.**  { *; }
+-keep class io.flutter.view.**  { *; }
+-keep class io.flutter.**  { *; }
+-keep class io.flutter.plugins.**  { *; }
+
+#==================其他==========================
+
+#极光推送
+-dontoptimize
+-dontpreverify
+-dontwarn cn.jpush.**
+-keep class cn.jpush.** { *; }
+
+
+

+ 144 - 0
app/android/app/src/main/AndroidManifest.xml

@@ -0,0 +1,144 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.hongyegroup.property_management">
+
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
+    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
+    <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+<!--    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />-->
+
+    <!-- Provide required visibility configuration for API level 30 and above -->
+    <queries>
+        <intent>
+            <action android:name="android.intent.action.VIEW" />
+            <data android:scheme="lehuoer" />
+        </intent>
+        <intent>
+            <action android:name="android.intent.action.VIEW" />
+            <data android:scheme="https" />
+        </intent>
+        <intent>
+            <action android:name="android.intent.action.DIAL" />
+            <data android:scheme="tel" />
+        </intent>
+        <intent>
+            <action android:name="android.intent.action.SENDTO" />
+            <data android:scheme="smsto" />
+        </intent>
+        <intent>
+            <action android:name="android.intent.action.SEND" />
+            <data android:mimeType="*/*" />
+        </intent>
+    </queries>
+
+    <application
+        android:name="android.app.src.main.kotlin.com.hongyegroup.property_management.MyApplication"
+        android:allowBackup="false"
+        android:icon="@mipmap/ic_launcher"
+        android:label="Hongye物业管理"
+        android:networkSecurityConfig="@xml/network_security_config"
+        android:roundIcon="@mipmap/ic_launcher_round"
+        android:usesCleartextTraffic="true">
+
+        <activity
+            android:name="android.app.src.main.kotlin.com.hongyegroup.property_management.MainActivity"
+            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
+            android:exported="true"
+            android:hardwareAccelerated="true"
+            android:launchMode="singleTop"
+            android:theme="@style/LaunchTheme"
+            android:windowSoftInputMode="adjustResize">
+
+            <meta-data
+                android:name="io.flutter.embedding.android.NormalTheme"
+                android:resource="@style/NormalTheme" />
+
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+
+        </activity>
+
+        <!--        <activity-->
+        <!--            android:name=".RouterActivity"-->
+        <!--            android:exported="true"-->
+        <!--            android:launchMode="singleTop"-->
+        <!--            android:theme="@style/Theme.AppCompat.Light.NoActionBar">-->
+
+        <!--            <intent-filter>-->
+        <!--                <action android:name="android.intent.action.VIEW" />-->
+
+        <!--                <category android:name="android.intent.category.BROWSABLE" />-->
+        <!--                <category android:name="android.intent.category.DEFAULT" />-->
+
+        <!--                <data-->
+        <!--                    android:host="router"-->
+        <!--                    android:scheme="app" />-->
+        <!--            </intent-filter>-->
+
+        <!--        </activity>-->
+
+        <!--    UCrop图片裁剪    -->
+        <activity
+            android:exported="false"
+            android:name="com.yalantis.ucrop.UCropActivity"
+            android:screenOrientation="portrait"
+            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
+
+        <!-- Don't delete the meta-data below.
+             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
+        <meta-data
+            android:name="flutterEmbedding"
+            android:value="2" />
+
+        <!--9.0兼容http-->
+        <uses-library
+            android:name="org.apache.http.legacy"
+            android:required="false" />
+
+        <!--本项目mate配置-->
+        <meta-data
+            android:name="android.max_aspect"
+            android:value="2.5" />
+
+        <meta-data
+            android:name="android.webkit.WebView.EnableSafeBrowing"
+            android:value="true" />
+
+
+    </application>
+
+    <queries>
+        <intent>
+            <action android:name="android.intent.action.SEND" />
+            <data android:mimeType="image/jpeg" />
+        </intent>
+        <intent>
+            <action android:name="android.intent.action.SEND" />
+            <data android:mimeType="text/plain" />
+        </intent>
+    </queries>
+
+    <!-- Android 11 使用相机适配  -->
+    <queries package="com.monstarlab.yyjobs">
+        <intent>
+            <action android:name="android.media.action.IMAGE_CAPTURE">
+
+            </action>
+        </intent>
+        <intent>
+            <action android:name="android.media.action.ACTION_VIDEO_CAPTURE">
+
+            </action>
+        </intent>
+    </queries>
+
+</manifest>

+ 86 - 0
app/android/app/src/main/kotlin/com/hongyegroup/property_management/MainActivity.java

@@ -0,0 +1,86 @@
+package android.app.src.main.kotlin.com.hongyegroup.property_management;
+
+import android.os.Bundle;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+//import androidx.core.splashscreen.SplashScreen;
+
+import io.flutter.embedding.android.FlutterActivity;
+import io.flutter.embedding.engine.FlutterEngine;
+import io.flutter.plugin.common.MethodChannel;
+
+public class MainActivity extends FlutterActivity {
+
+//    private SplashScreen mSplashScreen;
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+//        mSplashScreen = SplashScreen.installSplashScreen(this);
+//        mSplashScreen.setKeepOnScreenCondition(() -> true);
+
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
+        super.configureFlutterEngine(flutterEngine);
+
+        MethodChannel methodChannel = new MethodChannel(flutterEngine.getDartExecutor(), "com.room/opapp");
+
+        methodChannel.setMethodCallHandler((call, result) -> {
+            //检查人脸数量
+           if (call.method.equals("bringAppToForeground")) {
+                //启动MainActivity自己
+                Log.d("MainActivity", "执行 methodChannel -> bringAppToForeground");
+
+//                Intent intent = new Intent(this, MainActivity.class);
+//                intent.setAction(Intent.ACTION_MAIN);
+//                intent.addCategory(Intent.CATEGORY_LAUNCHER);
+//                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+//                intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+//                startActivity(intent);
+
+//                ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
+//                List<ActivityManager.AppTask> appTasks = activityManager.getAppTasks();
+//                if (!appTasks.isEmpty()) {
+//                    appTasks.get(0).moveToFront();
+//                }
+
+//                PackageManager packageManager = getPackageManager();
+//                Intent intent = packageManager.getLaunchIntentForPackage("com.hongyegroup.zhurijob");
+//                if (intent != null) {
+//                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+//                    startActivity(intent);
+//                }
+
+            } else if (call.method.equals("getNativeRouterName")) {
+                // 获取当前需要跳转的子路由
+                Log.d("MainActivity", "执行 methodChannel -> getNativeRouterName");
+//                result.success(RouterActivity.ROUTER_NAME);
+                result.success("");
+
+            } else if (call.method.equals("clearNativeRouterName")) {
+                // 清除当前需要跳转的子路由
+                Log.d("MainActivity", "执行 methodChannel -> clearNativeRouterName");
+//                RouterActivity.ROUTER_NAME = "";
+                result.success(true);
+            } else if (call.method.equals("appleLogin")) {
+                // 苹果登录-Android空实现
+                result.success(null);
+            } else if (call.method.equals("skipAndroidSplashScreen")) {
+                // 跳过Android的SplashScreen
+                Log.d("MainActivity", "执行 methodChannel -> skipAndroidSplashScreen");
+//                if (mSplashScreen != null) {
+//                    mSplashScreen.setKeepOnScreenCondition(() -> false);
+//                }
+                result.success(true);
+            } else {
+                result.notImplemented();
+            }
+        });
+
+    }
+
+}

+ 13 - 0
app/android/app/src/main/kotlin/com/hongyegroup/property_management/MyApplication.kt

@@ -0,0 +1,13 @@
+package android.app.src.main.kotlin.com.hongyegroup.property_management
+
+import android.content.Context
+import androidx.multidex.MultiDex
+import io.flutter.app.FlutterApplication
+
+class MyApplication : FlutterApplication() {
+
+    override fun attachBaseContext(base: Context?) {
+        super.attachBaseContext(base)
+        MultiDex.install(this)
+    }
+}

+ 48 - 0
app/android/app/src/main/kotlin/com/hongyegroup/property_management/RouterActivity.java

@@ -0,0 +1,48 @@
+//package com.guadou.yyemployer;
+//
+//import android.app.Activity;
+//import android.content.Intent;
+//import android.net.Uri;
+//import android.os.Bundle;
+//import android.util.Log;
+//import android.view.WindowManager;
+//
+//import androidx.annotation.Nullable;
+//
+//public class RouterActivity extends Activity {
+//
+//    public static String ROUTER_NAME = "";
+//
+//    @Override
+//    protected void onCreate(@Nullable Bundle savedInstanceState) {
+//        super.onCreate(savedInstanceState);
+//
+//        // 设置Activity为1像素大小及透明背景
+//        WindowManager.LayoutParams params = getWindow().getAttributes();
+//        params.height = 1;
+//        params.width = 1;
+//        params.alpha = 0;
+//        getWindow().setAttributes(params);
+//
+//        // 接收传递的参数
+//        Bundle extras = getIntent().getExtras();
+//        if (extras != null && extras.containsKey("name")) {
+//            String name = extras.getString("name");
+//            Log.w("RouterActivity","RouterActivity Bundle拿到路由名称参数为: " + name);
+//            ROUTER_NAME = name;
+//        }
+//
+//        Intent intent = getIntent();
+//        if (intent != null && intent.getData() != null) {
+//            Uri uri = intent.getData();
+//            Log.w("RouterActivity","RouterActivity 拿到 Scheme Uri: " + uri);
+//            String name = uri.getQueryParameter("name");
+//            Log.w("RouterActivity","RouterActivity Uri拿到路由名称参数为: " + name);
+//            ROUTER_NAME = name;
+//        }
+//
+//        // 关闭Activity
+//        finish();
+//
+//    }
+//}

+ 11 - 0
app/android/app/src/main/res/drawable-v21/launch_background.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/shape_page_bg"/>
+
+    <item >
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/yy_business_top_logo"/>
+    </item>
+
+</layer-list>

BIN
app/android/app/src/main/res/drawable-xhdpi/yy_business_top_logo.webp


BIN
app/android/app/src/main/res/drawable-xxhdpi/yy_business_top_logo.webp


+ 11 - 0
app/android/app/src/main/res/drawable/launch_background.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/shape_page_bg"/>
+
+    <item >
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/yy_business_top_logo"/>
+    </item>
+
+</layer-list>

+ 12 - 0
app/android/app/src/main/res/drawable/shape_page_bg.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <gradient
+        android:startColor="#091D44"
+        android:centerColor="#245A8A"
+        android:endColor="#7F7CEC"
+        android:type="linear"
+        android:angle="270" />
+
+</shape>

+ 5 - 0
app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/ic_launcher_background"/>
+    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon>

+ 5 - 0
app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/ic_launcher_background"/>
+    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon>

BIN
app/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp


BIN
app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp


BIN
app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp


BIN
app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp


BIN
app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp


BIN
app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp


BIN
app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp


BIN
app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp


BIN
app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp


+ 20 - 0
app/android/app/src/main/res/values-night/styles.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
+    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
+        <!-- Show a splash screen on the activity. Automatically removed when
+             Flutter draws its first frame -->
+        <item name="android:windowBackground">@drawable/launch_background</item>
+    </style>
+    <!-- Theme applied to the Android Window as soon as the process has started.
+         This theme determines the color of the Android Window while your
+         Flutter UI initializes, as well as behind your Flutter UI while its
+         running.
+
+         This Theme is only used starting with V2 of Flutter's Android embedding. -->
+    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
+        <item name="android:windowBackground">?android:colorBackground</item>
+    </style>
+
+
+</resources>

+ 13 - 0
app/android/app/src/main/res/values-v31/styles.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <!-- Android 12 SplashScreen  -->
+<!--    <style name="LaunchTheme" parent="Theme.SplashScreen">-->
+<!--        <item name="windowSplashScreenBackground">@android:color/white</item>-->
+<!--        <item name="windowSplashScreenAnimatedIcon">@drawable/login_logo_icon</item>-->
+<!--&lt;!&ndash;        <item name="windowSplashScreenAnimationDuration">1000</item>&ndash;&gt;-->
+<!--        <item name="postSplashScreenTheme">@style/NormalTheme</item>-->
+<!--        &lt;!&ndash;        <item name="android:windowSplashScreenBehavior">icon_preferred</item>&ndash;&gt;-->
+<!--    </style>-->
+
+</resources>

+ 4 - 0
app/android/app/src/main/res/values/ic_launcher_background.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="ic_launcher_background">#FFFFFF</color>
+</resources>

+ 19 - 0
app/android/app/src/main/res/values/styles.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
+    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
+        <!-- Show a splash screen on the activity. Automatically removed when
+             Flutter draws its first frame -->
+        <item name="android:windowBackground">@drawable/launch_background</item>
+    </style>
+    <!-- Theme applied to the Android Window as soon as the process has started.
+         This theme determines the color of the Android Window while your
+         Flutter UI initializes, as well as behind your Flutter UI while its
+         running.
+
+         This Theme is only used starting with V2 of Flutter's Android embedding. -->
+    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
+        <item name="android:windowBackground">?android:colorBackground</item>
+    </style>
+
+</resources>

+ 9 - 0
app/android/app/src/main/res/xml/network_security_config.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <!--允许使用http进行网络请求-->
+    <base-config cleartextTrafficPermitted="true" >
+        <trust-anchors>
+            <certificates src="system" />
+        </trust-anchors>
+    </base-config>
+</network-security-config>

+ 18 - 0
app/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
+}

+ 4 - 0
app/android/gradle.properties

@@ -0,0 +1,4 @@
+org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
+android.useAndroidX=true
+android.enableJetifier=true
+maven={ url 'https://maven.aliyun.com/repository/public' }

+ 6 - 0
app/android/gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,6 @@
+#Sun Jan 24 20:08:12 CST 2021
+distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME

+ 4 - 0
app/android/key.properties

@@ -0,0 +1,4 @@
+storeFile=../key/yyemployer.jks
+storePassword=123456
+keyAlias=guadou
+keyPassword=123456

BIN
app/android/key/yyemployer.jks


+ 25 - 0
app/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.1.2" apply false
+    id "org.jetbrains.kotlin.android" version "1.8.0" apply false
+}
+
+include ":app"

+ 34 - 0
app/ios/.gitignore

@@ -0,0 +1,34 @@
+flutter clean**/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

+ 26 - 0
app/ios/Flutter/AppFrameworkInfo.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>App</string>
+	<key>CFBundleIdentifier</key>
+	<string>io.flutter.flutter.app</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>App</string>
+	<key>CFBundlePackageType</key>
+	<string>FMWK</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>MinimumOSVersion</key>
+	<string>12.0</string>
+</dict>
+</plist>

+ 2 - 0
app/ios/Flutter/Debug.xcconfig

@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include "Generated.xcconfig"

+ 2 - 0
app/ios/Flutter/Release.xcconfig

@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include "Generated.xcconfig"

+ 10 - 0
app/ios/Gemfile

@@ -0,0 +1,10 @@
+# Autogenerated by fastlane
+#
+# Ensure this file is checked in to source control!
+
+source "https://rubygems.org"
+
+gem 'fastlane'
+
+plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
+eval_gemfile(plugins_path) if File.exist?(plugins_path)

+ 86 - 0
app/ios/Podfile

@@ -0,0 +1,86 @@
+# Uncomment this line to define a global platform for your project
+platform :ios, '12.0'
+
+
+# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
+ENV['COCOAPODS_DISABLE_STATS'] = 'true'
+
+project 'Runner', {
+  'Debug' => :debug,
+  'Profile' => :release,
+  'Release' => :release,
+}
+
+def flutter_root
+  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
+  unless File.exist?(generated_xcode_build_settings_path)
+    raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
+  end
+  
+  File.foreach(generated_xcode_build_settings_path) do |line|
+    matches = line.match(/FLUTTER_ROOT\=(.*)/)
+    return matches[1].strip if matches
+  end
+  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
+end
+
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_ios_podfile_setup
+
+target 'Runner' do
+  use_frameworks!
+  use_modular_headers!
+  
+  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
+end
+
+$iOSVersion = '12.0'
+
+post_install do |installer|
+  
+  
+  installer.pods_project.targets.each do |target|
+    flutter_additional_ios_build_settings(target)
+    
+    # Start of the permission_handler configuration
+    target.build_configurations.each do |config|
+      
+      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
+      '$(inherited)',
+      
+      
+      ## dart: PermissionGroup.camera
+      'PERMISSION_CAMERA=1',
+      
+      
+      ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
+      'PERMISSION_LOCATION=1',
+      
+      ]
+    end
+    
+    
+    installer.pods_project.build_configurations.each do |config|
+      config.build_settings["EXCLUDED_ARCHS[sdk=*]"] = "armv7"
+      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
+    end
+    
+    installer.pods_project.targets.each do |target|
+      flutter_additional_ios_build_settings(target)
+      
+      # add these lines:
+      target.build_configurations.each do |config|
+        if Gem::Version.new($iOSVersion) > Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'])
+          config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
+        end
+      end
+      
+    end
+    
+    
+  end
+  
+  
+  
+end

+ 624 - 0
app/ios/Runner.xcodeproj/project.pbxproj

@@ -0,0 +1,624 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 54;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+		27DBCD0F7C9EBFC0F6BE4B99 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 170B930EF1FAA0602CCBFC69 /* Pods_Runner.framework */; };
+		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+		4F73B2B32C36925F00950271 /* GradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F73B2B22C36925F00950271 /* GradientView.swift */; };
+		665B26D52C4A187100075D68 /* LaunchBG@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 665B26D32C4A187100075D68 /* LaunchBG@3x.png */; };
+		665B26D62C4A187100075D68 /* LaunchBG@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 665B26D42C4A187100075D68 /* LaunchBG@2x.png */; };
+		74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+		77F6D3242AE26F2C006D74CD /* AuthenticationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 77F6D3222AE26F25006D74CD /* AuthenticationServices.framework */; };
+		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
+		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
+		170B930EF1FAA0602CCBFC69 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		1BEC344927FDA4FD1E70B590 /* 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 = "<group>"; };
+		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
+		3E1E524A98C4C35F938991E4 /* 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 = "<group>"; };
+		4F73B2B22C36925F00950271 /* GradientView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientView.swift; sourceTree = "<group>"; };
+		6616B60E2C49372000E016FA /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = "<group>"; };
+		6616B60F2C49372000E016FA /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/LaunchScreen.strings"; sourceTree = "<group>"; };
+		6616B6122C49373200E016FA /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/Main.strings"; sourceTree = "<group>"; };
+		6616B6132C49373200E016FA /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/LaunchScreen.strings"; sourceTree = "<group>"; };
+		665B26D32C4A187100075D68 /* LaunchBG@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LaunchBG@3x.png"; sourceTree = "<group>"; };
+		665B26D42C4A187100075D68 /* LaunchBG@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LaunchBG@2x.png"; sourceTree = "<group>"; };
+		66679C9D2C60DBF80037EB3A /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Main.strings; sourceTree = "<group>"; };
+		66679C9E2C60DBF80037EB3A /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
+		74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
+		74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+		776500082ABD7998008C323B /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
+		77F6D3222AE26F25006D74CD /* AuthenticationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AuthenticationServices.framework; path = System/Library/Frameworks/AuthenticationServices.framework; sourceTree = SDKROOT; };
+		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
+		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
+		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
+		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 = "<group>"; };
+		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		C710FA3786AA4068C6F89E86 /* 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 = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		97C146EB1CF9000F007C117D /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				77F6D3242AE26F2C006D74CD /* AuthenticationServices.framework in Frameworks */,
+				27DBCD0F7C9EBFC0F6BE4B99 /* Pods_Runner.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		2413C548AABC2ABBFAD6F321 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				77F6D3222AE26F25006D74CD /* AuthenticationServices.framework */,
+				170B930EF1FAA0602CCBFC69 /* Pods_Runner.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		4B18F87853DC2A64DA973B87 /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				C710FA3786AA4068C6F89E86 /* Pods-Runner.debug.xcconfig */,
+				1BEC344927FDA4FD1E70B590 /* Pods-Runner.release.xcconfig */,
+				3E1E524A98C4C35F938991E4 /* Pods-Runner.profile.xcconfig */,
+			);
+			path = Pods;
+			sourceTree = "<group>";
+		};
+		9740EEB11CF90186004384FC /* Flutter */ = {
+			isa = PBXGroup;
+			children = (
+				3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+				9740EEB21CF90195004384FC /* Debug.xcconfig */,
+				7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+				9740EEB31CF90195004384FC /* Generated.xcconfig */,
+			);
+			name = Flutter;
+			sourceTree = "<group>";
+		};
+		97C146E51CF9000F007C117D = {
+			isa = PBXGroup;
+			children = (
+				9740EEB11CF90186004384FC /* Flutter */,
+				97C146F01CF9000F007C117D /* Runner */,
+				97C146EF1CF9000F007C117D /* Products */,
+				4B18F87853DC2A64DA973B87 /* Pods */,
+				2413C548AABC2ABBFAD6F321 /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		97C146EF1CF9000F007C117D /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				97C146EE1CF9000F007C117D /* Runner.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		97C146F01CF9000F007C117D /* Runner */ = {
+			isa = PBXGroup;
+			children = (
+				776500082ABD7998008C323B /* Runner.entitlements */,
+				97C146FA1CF9000F007C117D /* Main.storyboard */,
+				97C146FD1CF9000F007C117D /* Assets.xcassets */,
+				4F73B2B22C36925F00950271 /* GradientView.swift */,
+				97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+				97C147021CF9000F007C117D /* Info.plist */,
+				1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+				1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+				74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
+				74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+				665B26D42C4A187100075D68 /* LaunchBG@2x.png */,
+				665B26D32C4A187100075D68 /* LaunchBG@3x.png */,
+			);
+			path = Runner;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		97C146ED1CF9000F007C117D /* Runner */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+			buildPhases = (
+				3105295E4DADBC89CA330491 /* [CP] Check Pods Manifest.lock */,
+				9740EEB61CF901F6004384FC /* Run Script */,
+				97C146EA1CF9000F007C117D /* Sources */,
+				97C146EB1CF9000F007C117D /* Frameworks */,
+				97C146EC1CF9000F007C117D /* Resources */,
+				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+				F4664E1960AB5AF20D861E87 /* [CP] Embed Pods Frameworks */,
+				F004C36936C89F93981F1B41 /* [CP] Copy Pods Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Runner;
+			productName = Runner;
+			productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		97C146E61CF9000F007C117D /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 1510;
+				ORGANIZATIONNAME = "";
+				TargetAttributes = {
+					97C146ED1CF9000F007C117D = {
+						CreatedOnToolsVersion = 7.3.1;
+						LastSwiftMigration = 1100;
+					};
+				};
+			};
+			buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+			compatibilityVersion = "Xcode 9.3";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+				"zh-Hans",
+				"zh-HK",
+				vi,
+			);
+			mainGroup = 97C146E51CF9000F007C117D;
+			productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				97C146ED1CF9000F007C117D /* Runner */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		97C146EC1CF9000F007C117D /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				665B26D62C4A187100075D68 /* LaunchBG@2x.png in Resources */,
+				665B26D52C4A187100075D68 /* LaunchBG@3x.png in Resources */,
+				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 */
+		3105295E4DADBC89CA330491 /* [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;
+		};
+		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
+			);
+			name = "Thin Binary";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+		};
+		9740EEB61CF901F6004384FC /* Run Script */ = {
+			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Run Script";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+		};
+		F004C36936C89F93981F1B41 /* [CP] Copy Pods Resources */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+			);
+			name = "[CP] Copy Pods Resources";
+			outputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		F4664E1960AB5AF20D861E87 /* [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 */
+		97C146EA1CF9000F007C117D /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+				1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+				4F73B2B32C36925F00950271 /* GradientView.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				97C146FB1CF9000F007C117D /* Base */,
+				6616B60E2C49372000E016FA /* zh-Hans */,
+				6616B6122C49373200E016FA /* zh-HK */,
+				66679C9D2C60DBF80037EB3A /* vi */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+		97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				97C147001CF9000F007C117D /* Base */,
+				6616B60F2C49372000E016FA /* zh-Hans */,
+				6616B6132C49373200E016FA /* zh-HK */,
+				66679C9E2C60DBF80037EB3A /* vi */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		249021D3217E4FDB00AE95B9 /* Profile */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				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;
+				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+				CURRENT_PROJECT_VERSION = 1.0.5;
+				DEVELOPMENT_TEAM = CW4J9W8LB6;
+				ENABLE_BITCODE = NO;
+				FLUTTER_BUILD_MODE = profile;
+				INFOPLIST_FILE = Runner/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = "YY Employers";
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 3.0;
+				PRODUCT_BUNDLE_IDENTIFIER = com.guadou.YYEmployer;
+				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,2";
+				VERSIONING_SYSTEM = "apple-generic";
+			};
+			name = Profile;
+		};
+		97C147031CF9000F007C117D /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		97C147041CF9000F007C117D /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				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;
+				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+				CURRENT_PROJECT_VERSION = 1.0.5;
+				DEVELOPMENT_TEAM = CW4J9W8LB6;
+				ENABLE_BITCODE = NO;
+				FLUTTER_BUILD_MODE = debug;
+				INFOPLIST_FILE = Runner/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = "YY Employers";
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 3.0;
+				PRODUCT_BUNDLE_IDENTIFIER = com.guadou.YYEmployer;
+				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,2";
+				VERSIONING_SYSTEM = "apple-generic";
+			};
+			name = Debug;
+		};
+		97C147071CF9000F007C117D /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_MODULES = YES;
+				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+				CURRENT_PROJECT_VERSION = 1.0.5;
+				DEVELOPMENT_TEAM = CW4J9W8LB6;
+				ENABLE_BITCODE = NO;
+				FLUTTER_BUILD_MODE = release;
+				INFOPLIST_FILE = Runner/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = "YY Employers";
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 3.0;
+				PRODUCT_BUNDLE_IDENTIFIER = com.guadou.YYEmployer;
+				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,2";
+				VERSIONING_SYSTEM = "apple-generic";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				97C147031CF9000F007C117D /* Debug */,
+				97C147041CF9000F007C117D /* Release */,
+				249021D3217E4FDB00AE95B9 /* Profile */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				97C147061CF9000F007C117D /* Debug */,
+				97C147071CF9000F007C117D /* Release */,
+				249021D4217E4FDB00AE95B9 /* Profile */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}

+ 7 - 0
app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:">
+   </FileRef>
+</Workspace>

+ 8 - 0
app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>

+ 8 - 0
app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreviewsEnabled</key>
+	<false/>
+</dict>
+</plist>

+ 87 - 0
app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1510"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "97C146ED1CF9000F007C117D"
+               BuildableName = "Runner.app"
+               BlueprintName = "Runner"
+               ReferencedContainer = "container:Runner.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
+            BuildableName = "Runner.app"
+            BlueprintName = "Runner"
+            ReferencedContainer = "container:Runner.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
+            BuildableName = "Runner.app"
+            BlueprintName = "Runner"
+            ReferencedContainer = "container:Runner.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Profile"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
+            BuildableName = "Runner.app"
+            BlueprintName = "Runner"
+            ReferencedContainer = "container:Runner.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 10 - 0
app/ios/Runner.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:Runner.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
+</Workspace>

+ 8 - 0
app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>

+ 8 - 0
app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreviewsEnabled</key>
+	<false/>
+</dict>
+</plist>

+ 114 - 0
app/ios/Runner/AppDelegate.swift

@@ -0,0 +1,114 @@
+import UIKit
+import AppTrackingTransparency
+import Flutter
+import AuthenticationServices
+
+@main
+@objc class AppDelegate: FlutterAppDelegate {
+    
+    var channel:FlutterMethodChannel!
+    
+    var appleLoginResultBlock:((Dictionary<String, String>)->())!
+    
+  override func application(
+    _ application: UIApplication,
+    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+  ) -> Bool {
+      GeneratedPluginRegistrant.register(with: self)
+      self.initPlatformMethods()
+    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+  }
+    
+    override func applicationDidBecomeActive(_ application: UIApplication) {
+        if #available(iOS 14, *) {
+            ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
+                
+            })
+        }
+        UIApplication.shared.applicationIconBadgeNumber = 0;
+    }
+    
+    func initPlatformMethods(){
+        self.channel = FlutterMethodChannel.init(name: "com.room/opapp", binaryMessenger: self.window.rootViewController as! FlutterBinaryMessenger)
+        self.channel.setMethodCallHandler { call, result in
+            if (call.method == "checkFace"){
+                result(self.checkFace(path: call.arguments as! String));
+            }else if (call.method == "appleLogin"){
+                self.appleLogin()
+                self.appleLoginResultBlock = { dic in
+                    result(dic);
+                }
+                
+            }else if (call.method == "getNativeRouterName"){
+                result("");
+            }else if (call.method == "skipAndroidSplashScreen"){
+                result(true);
+            }
+        }
+    }
+    func checkFace(path:String) -> Int{
+        var image = CIImage.init(image: .init(contentsOfFile: path)!)
+        var detector = CIDetector.init(ofType: CIDetectorTypeFace, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])
+        var features = detector!.features(in: image!);
+        return features.count;
+    }
+    
+    func appleLogin() {
+        if #available(iOS 13.0, *) {
+            let appleIDProvider = ASAuthorizationAppleIDProvider()
+            let request = appleIDProvider.createRequest()
+            request.requestedScopes = [.fullName, .email] // 可根据需求选择请求的范围
+            
+            let authorizationController = ASAuthorizationController(authorizationRequests: [request])
+            authorizationController.delegate = self
+            authorizationController.presentationContextProvider = self
+            authorizationController.performRequests()
+        } else {
+            // Fallback on earlier versions
+        }
+
+    }
+}
+
+@available(iOS 13.0, *)
+extension AppDelegate: ASAuthorizationControllerDelegate, ASAuthorizationControllerPresentationContextProviding {
+    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
+        return UIApplication.shared.windows.filter({ $0.isKeyWindow }).last!
+    }
+    
+    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
+        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
+            let identityToken = String.init(data: appleIDCredential.identityToken!, encoding: .utf8) ?? ""
+//            let authorizationCode = String.init(data: appleIDCredential.authorizationCode!, encoding: .utf8) ?? ""
+            self.appleLoginResultBlock(["identityToken":identityToken,"authorizationCode":appleIDCredential.user,"error":""])
+        }else{
+            self.appleLoginResultBlock(["error":"授权信息不符"]);
+        }
+    }
+    
+    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
+        // 处理登录错误
+//        self.appleLoginResultBlock(["error":error.localizedDescription])
+        
+        var msg = "未知错误,请稍后重试";
+        
+        switch error {
+        case ASAuthorizationError.unknown:
+            //未知错误
+            break;
+        case ASAuthorizationError.canceled:
+            //用户取消
+            msg = "";
+        case ASAuthorizationError.failed:
+            msg = "授权请求失败";
+        case ASAuthorizationError.invalidResponse:
+            msg = "授权请求无响应";
+        case ASAuthorizationError.notHandled:
+            msg = "授权请求未处理";
+        default:
+            break;
+        }
+        
+        self.appleLoginResultBlock(["error":msg])
+    }
+}

BIN
app/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png


+ 14 - 0
app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,14 @@
+{
+  "images" : [
+    {
+      "filename" : "1024.png",
+      "idiom" : "universal",
+      "platform" : "ios",
+      "size" : "1024x1024"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 6 - 0
app/ios/Runner/Assets.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "LaunchImage@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "LaunchImage@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png


BIN
app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png


+ 21 - 0
app/ios/Runner/Assets.xcassets/logo.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "logo.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
app/ios/Runner/Assets.xcassets/logo.imageset/logo.png


+ 51 - 0
app/ios/Runner/Base.lproj/LaunchScreen.storyboard

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+    <device id="retina4_7" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="LaunchBG.png" translatesAutoresizingMaskIntoConstraints="NO" id="tNR-J0-C2x">
+                                <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                            </imageView>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="Pu5-Up-dfw">
+                                <rect key="frame" x="104.5" y="299.5" width="166" height="68"/>
+                            </imageView>
+                        </subviews>
+                        <viewLayoutGuide key="safeArea" id="UaE-PJ-QZk"/>
+                        <color key="backgroundColor" systemColor="tertiaryLabelColor"/>
+                        <constraints>
+                            <constraint firstAttribute="bottom" secondItem="tNR-J0-C2x" secondAttribute="bottom" id="1Lq-rq-g1S"/>
+                            <constraint firstItem="Pu5-Up-dfw" firstAttribute="centerX" secondItem="tNR-J0-C2x" secondAttribute="centerX" id="5UC-LA-jKf"/>
+                            <constraint firstItem="tNR-J0-C2x" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="DWN-Tu-Vde"/>
+                            <constraint firstItem="Pu5-Up-dfw" firstAttribute="centerY" secondItem="tNR-J0-C2x" secondAttribute="centerY" id="ewy-U3-5wj"/>
+                            <constraint firstAttribute="trailing" secondItem="tNR-J0-C2x" secondAttribute="trailing" id="fWW-7q-1ZL"/>
+                            <constraint firstItem="tNR-J0-C2x" firstAttribute="leading" secondItem="UaE-PJ-QZk" secondAttribute="leading" id="mD2-Fb-bwB"/>
+                        </constraints>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="80.152671755725194" y="264.08450704225356"/>
+        </scene>
+    </scenes>
+    <resources>
+        <image name="LaunchBG.png" width="375" height="667"/>
+        <image name="LaunchImage" width="166" height="67.5"/>
+        <systemColor name="tertiaryLabelColor">
+            <color red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.29803921570000003" colorSpace="custom" customColorSpace="sRGB"/>
+        </systemColor>
+    </resources>
+</document>

+ 26 - 0
app/ios/Runner/Base.lproj/Main.storyboard

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
+    </dependencies>
+    <scenes>
+        <!--Flutter View Controller-->
+        <scene sceneID="tne-QT-ifu">
+            <objects>
+                <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
+                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+            </objects>
+        </scene>
+    </scenes>
+</document>

+ 42 - 0
app/ios/Runner/GradientView.swift

@@ -0,0 +1,42 @@
+//
+//  GradientView.swift
+//  Runner
+//
+//  Created by liukai on 2024/7/4.
+//
+
+import UIKit
+
+class GradientView: UIView {
+    override func draw(_ rect: CGRect) {
+        guard let context = UIGraphicsGetCurrentContext() else { return }
+        
+        let colors = [UIColor(hex: "#091D44").cgColor, UIColor(hex: "#245A8A").cgColor, UIColor(hex: "#7F7CEC").cgColor]
+        let colorSpace = CGColorSpaceCreateDeviceRGB()
+        let colorLocations: [CGFloat] = [0.0, 0.5, 1.0]
+        
+        guard let gradient = CGGradient(colorsSpace: colorSpace, colors: colors as CFArray, locations: colorLocations) else { return }
+        
+        let startPoint = CGPoint.zero
+        let endPoint = CGPoint(x: 0, y: bounds.height)
+        
+        context.drawLinearGradient(gradient, start: startPoint, end: endPoint, options: [])
+    }
+}
+
+extension UIColor {
+    convenience init(hex: String) {
+        var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines)
+        hexSanitized = hexSanitized.replacingOccurrences(of: "#", with: "")
+        
+        var rgb: UInt64 = 0
+        
+        Scanner(string: hexSanitized).scanHexInt64(&rgb)
+        
+        let red = CGFloat((rgb & 0xFF0000) >> 16) / 255.0
+        let green = CGFloat((rgb & 0x00FF00) >> 8) / 255.0
+        let blue = CGFloat(rgb & 0x0000FF) / 255.0
+        
+        self.init(red: red, green: green, blue: blue, alpha: 1.0)
+    }
+}

+ 101 - 0
app/ios/Runner/Info.plist

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CADisableMinimumFrameDurationOnPhone</key>
+	<true/>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>$(DEVELOPMENT_LANGUAGE)</string>
+	<key>CFBundleDisplayName</key>
+	<string>YY Employers</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>$(MARKETING_VERSION)</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleURLTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>wx3449abcf85910464</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>tencent102019408</string>
+			</array>
+		</dict>
+	</array>
+	<key>CFBundleVersion</key>
+	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<key>LSApplicationQueriesSchemes</key>
+	<array>
+		<string>qqmap</string>
+		<string>mqqopensdknopasteboard</string>
+		<string>mqqopensdkapiV2</string>
+		<string>mqq</string>
+		<string>tim</string>
+		<string>baidumap</string>
+		<string>iosamap</string>
+		<string>whatsapp</string>
+		<string>https</string>
+		<string>http</string>
+		<string>wechat</string>
+		<string>weixin</string>
+		<string>weixinULAPI</string>
+		<string>weixinURLParamsAPI</string>
+	</array>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
+	<key>NSCameraUsageDescription</key>
+	<string>“YY Employers”apply for your camera permission to use functions such as taking avatars, uploading videos, uploading and saving pictures, and real-name authentication.</string>
+	<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
+	<string>YY Employers needs your location to recommend nearby jobs</string>
+	<key>NSLocationWhenInUseUsageDescription</key>
+	<string>YY Employers needs your location to recommend nearby jobs.</string>
+	<key>NSPhotoLibraryAddUsageDescription</key>
+	<string>"YY Employers" wants to access your photos for image upload, image saving and other functions.</string>
+	<key>NSPhotoLibraryUsageDescription</key>
+	<string>"YY Employers" wants to access your photos for image upload, image saving and other functions.</string>
+	<key>NSUserTrackingUsageDescription</key>
+	<string>This identifier will be used to deliver personalized job to you.</string>
+	<key>UIApplicationSupportsIndirectInputEvents</key>
+	<true/>
+	<key>UIBackgroundModes</key>
+	<array>
+		<string>remote-notification</string>
+	</array>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>UIMainStoryboardFile</key>
+	<string>Main</string>
+	<key>UIRequiresFullScreen</key>
+	<true/>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+	</array>
+	<key>UIViewControllerBasedStatusBarAppearance</key>
+	<false/>
+</dict>
+</plist>

BIN
app/ios/Runner/LaunchBG@2x.png


BIN
app/ios/Runner/LaunchBG@3x.png


+ 1 - 0
app/ios/Runner/Runner-Bridging-Header.h

@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"

+ 18 - 0
app/ios/Runner/Runner.entitlements

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>aps-environment</key>
+	<string>development</string>
+	<key>com.apple.developer.applesignin</key>
+	<array>
+		<string>Default</string>
+	</array>
+	<key>com.apple.developer.associated-domains</key>
+	<array>
+		<string>applinks:api.lehuoer.cn</string>
+	</array>
+	<key>com.apple.developer.networking.wifi-info</key>
+	<true/>
+</dict>
+</plist>

+ 1 - 0
app/ios/Runner/th.lproj/LaunchScreen.strings

@@ -0,0 +1 @@
+

+ 1 - 0
app/ios/Runner/th.lproj/Main.strings

@@ -0,0 +1 @@
+

+ 1 - 0
app/ios/Runner/vi.lproj/LaunchScreen.strings

@@ -0,0 +1 @@
+

+ 1 - 0
app/ios/Runner/vi.lproj/Main.strings

@@ -0,0 +1 @@
+

+ 1 - 0
app/ios/Runner/zh-HK.lproj/LaunchScreen.strings

@@ -0,0 +1 @@
+

+ 1 - 0
app/ios/Runner/zh-HK.lproj/Main.strings

@@ -0,0 +1 @@
+

+ 1 - 0
app/ios/Runner/zh-Hans.lproj/LaunchScreen.strings

@@ -0,0 +1 @@
+

+ 1 - 0
app/ios/Runner/zh-Hans.lproj/Main.strings

@@ -0,0 +1 @@
+

+ 11 - 0
app/ios/apple-app-site-association.plist

@@ -0,0 +1,11 @@
+{
+    "applinks": {
+        "apps": [],
+        "details": [
+            {
+                "appID": "CW4J9W8LB6.com.guadoutech.lehuoer",
+                "paths": [ "/qq_conn/102019408/*"]
+            }
+        ]
+    }
+}

+ 6 - 0
app/ios/fastlane/Appfile

@@ -0,0 +1,6 @@
+# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
+# apple_id("[[APPLE_ID]]") # Your Apple Developer Portal username
+
+
+# For more information about the Appfile, see:
+#     https://docs.fastlane.tools/advanced/#appfile

+ 54 - 0
app/ios/fastlane/Fastfile

@@ -0,0 +1,54 @@
+# This file contains the fastlane.tools configuration
+# You can find the documentation at https://docs.fastlane.tools
+#
+# For a list of all available actions, check out
+#
+#     https://docs.fastlane.tools/actions
+#
+# For a list of all available plugins, check out
+#
+#     https://docs.fastlane.tools/plugins/available-plugins
+#
+
+# Uncomment the line if you want fastlane to automatically update itself
+# update_fastlane
+
+default_platform(:ios)
+
+platform :ios do
+    desc "测试环境上传到蒲公英"
+  # 打包时候用的名称   例如 fastlane app
+  lane :dev do 
+    # add actions here: https://docs.fastlane.tools/actions
+    gym(
+    # 每次打包之前clean一下
+    clean: true,    
+    # 打包出 ipa 文件的路径,我放到了桌面文件夹,你自行更改文件夹
+    output_directory: '/Volumes/Data/IPA/TestIPA/'++ Time.new.strftime("%Y-%m-%d %H-%M-%S"), 
+    # 打包的名称,可任意取 
+    output_name: 'FulltimeEmployer', 
+    # 项目包含iCloud指定环境 Development 或者 Production
+    #export_options:{
+    #    "iCloudContainerEnvironment":"Development"
+    #},
+    # 项目的 scheme,自己项目名   target名称
+    scheme: "Runner",      
+    # 默认 Release,Release or Debug     
+    configuration: 'Release', 
+    # 是否包含 bitcode  
+    include_bitcode: false,  
+    # 是否包含 symbols 
+    include_symbols: true, 
+    # 打包导出方式,包含 app-store, validation, ad-hoc, package, enterprise, development, developer-id and mac-application   
+    export_method: 'development',  
+    # 这个设置是为了设置 xcode 自动配置证书和配置文件,当然也可以手动配置,可以参考文档
+    export_xcargs: '-allowProvisioningUpdates' 
+    )
+    #配置上传蒲公英账号  蒲公英的 api_key和 user_key  
+    pgyer(api_key:'12345678', update_description: "fastlane自动打包")
+
+    # mac上的通知弹窗,通知打包完毕
+    notification(app_icon: "./fastlane/icon.png", title: "manager", subtitle: "测试环境打包成功,已导出安装包", message: "")
+
+  end
+ end

+ 6 - 0
app/ios/fastlane/Pluginfile

@@ -0,0 +1,6 @@
+# Autogenerated by fastlane
+#
+# Ensure this file is checked in to source control!
+
+gem 'fastlane-plugin-pgyer'
+gem 'fastlane-plugin-pgyer'

+ 32 - 0
app/ios/fastlane/README.md

@@ -0,0 +1,32 @@
+fastlane documentation
+----
+
+# Installation
+
+Make sure you have the latest version of the Xcode command line tools installed:
+
+```sh
+xcode-select --install
+```
+
+For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
+
+# Available Actions
+
+## iOS
+
+### ios dev
+
+```sh
+[bundle exec] fastlane ios dev
+```
+
+测试环境上传到蒲公英
+
+----
+
+This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
+
+More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
+
+The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).

+ 28 - 0
app/ios/fastlane/report.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuites>
+  <testsuite name="fastlane.lanes">
+    
+    
+    
+      
+      <testcase classname="fastlane.lanes" name="0: default_platform" time="0.000267">
+        
+      </testcase>
+    
+      
+      <testcase classname="fastlane.lanes" name="1: gym" time="159.525949">
+        
+      </testcase>
+    
+      
+      <testcase classname="fastlane.lanes" name="2: pgyer" time="13.375774">
+        
+      </testcase>
+    
+      
+      <testcase classname="fastlane.lanes" name="3: notification" time="0.237306">
+        
+      </testcase>
+    
+  </testsuite>
+</testsuites>

+ 88 - 0
app/lib/jpush/jpush_receive.dart

@@ -0,0 +1,88 @@
+// import 'dart:convert';
+//
+// import 'package:jpush_flutter/jpush_flutter.dart';
+// import 'package:plugin_basic/constants/app_constant.dart';
+// import 'package:plugin_basic/service/user_service.dart';
+// import 'package:shared/utils/log_utils.dart';
+//
+//
+// /// 处理极光推送的逻辑
+// class JPushReceive {
+//   JPushReceive._internal();
+//
+//   //保存单例
+//   static final JPushReceive _singleton = JPushReceive._internal();
+//
+//   //工厂构造函数
+//   factory JPushReceive() => _singleton;
+//
+//   /// 初始化极光推送,并设置监听回调
+//   void init() {
+//     JPush jpush = JPush();
+//
+//     jpush.addEventHandler(
+//       // 接收通知回调方法。
+//       onReceiveNotification: (Map<String, dynamic> message) async {
+//         Log.d("flutter-jpush: onReceiveNotification: $message");
+//       },
+//       // 点击通知回调方法。
+//       onOpenNotification: (Map<String, dynamic> message) async {
+//         Log.d("flutter-jpush: onOpenNotification: $message");
+//
+//         //拿到后端设置的内容Json对象
+//         dynamic extrasJson = message['extras'];
+//         dynamic extrasChildJson = extrasJson['cn.jpush.android.EXTRA'];
+//         Map<String, dynamic> jsonMap = jsonDecode(extrasChildJson.toString());
+//
+//         //根据后端返回的type类型跳转到不同的路由页面
+//
+//       },
+//       // 接收自定义消息回调方法。
+//       onReceiveMessage: (Map<String, dynamic> message) async {
+//         Log.d("flutter-jpush: onReceiveMessage: $message");
+//       },
+//       // 通知授权的回调
+//       onReceiveNotificationAuthorization: (Map<String, dynamic> message) async {
+//         Log.d("flutter-jpush: onReceiveNotificationAuthorization: $message");
+//         if (message.containsKey('isEnabled')) {
+//
+//           //不管有没有开启通知权限,通知开关,先拿到 RegistrationId 赋值了再说
+//           final registrationId = await getRegistrationId();
+//           Log.d('flutter-jpush: 获取到registrationId:$registrationId');
+//
+//           //设置给 RxString 对象,并保存到 UserService 中。
+//           UserService.to.registrationId.value = registrationId;
+//         } else {
+//           Log.d("flutter-jpush: onReceiveNotificationAuthorization 没有isEnable字段");
+//         }
+//       },
+//
+//       // // 通知不显示的回调
+//       // onNotifyMessageUnShow: (Map<String, dynamic> message) async {
+//       //   Log.d("flutter-refruiter: onNotifyMessageUnShow: $message");
+//       // },
+//       // // 极光推送连接的回调
+//       // onConnected: (Map<String, dynamic> message) async {
+//       //   Log.d("flutter-refruiter: onConnected: $message");
+//       // },
+//     );
+//
+//     jpush.setup(
+//       appKey: "23dedb30175208f894d3756f",
+//       channel: "developer-default",
+//       production: AppConstant.inProduction,
+//       debug: !AppConstant.inProduction, // 设置是否打印 debug 日志
+//     );
+//
+//     //申请iOS授权
+//     jpush.applyPushAuthority(const NotificationSettingsIOS(sound: true, alert: true, badge: true));
+//   }
+//
+//   /// 获取极光推送的id
+//   Future<String> getRegistrationId() async {
+//     JPush jpush = JPush();
+//     return jpush.getRegistrationID();
+//   }
+// }
+//
+// var jpush = JPushReceive();

+ 192 - 0
app/lib/main.dart

@@ -0,0 +1,192 @@
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_localizations/flutter_localizations.dart';
+import 'package:initializer/global_services_injection.dart';
+import 'package:initializer/app_initializer.dart';
+import 'package:plugin_basic/basic_export.dart';
+import 'package:router/componentRouter/auth_service.dart';
+
+import 'package:cs_resources/local/theme/theme_config.dart';
+import 'package:cs_resources/local/language/translation_service.dart';
+import 'package:router/path/router_path.dart';
+
+import 'package:widgets/dialog/custom_toast_widget.dart';
+import 'package:widgets/dialog/custom_error_widget.dart';
+import 'package:widgets/dialog/custom_failure_widget.dart';
+import 'package:widgets/dialog/custom_success_widget.dart';
+import 'package:widgets/dialog/custom_loading_widget.dart';
+import 'package:widgets/widget_export.dart';
+
+import 'router/app_page_router.dart';
+import 'rp_obs/riverpod_observer.dart';
+
+void main() async {
+  //运行App
+  // FlutterBugly.postCatchedException(() async {
+  //交给初始化构造器去统一初始化
+  await AppInitializer.initializeRunalone();
+
+  //全局自定义单例服务的注入
+  // GlobalServicesInjection.init(additionalDependencies: () {
+  //   Get.lazyPut<AuthService>(() => AuthServiceImpl());
+  //   Get.lazyPut<LabourService>(() => LabourServiceImpl());
+  //   Get.lazyPut<JobService>(() => JobServiceImpl());
+  //   Get.lazyPut<ReportService>(() => ReportServiceImpl());
+  //   Get.lazyPut<JobSGService>(() => JobSGServiceImpl());
+  //   Get.lazyPut<LabourSGService>(() => LabourSGServiceImpl());
+  // });
+
+  runApp(ProviderScope(
+    observers: [RiverpodObserver()],
+    child: MyApp(),
+  ));
+  // });
+}
+
+class MyApp extends StatelessWidget {
+  MyApp({Key? key}) : super(key: key) {
+    /// 全局设置 EasyRefresh 的样式
+    EasyRefresh.defaultHeaderBuilder = () => const ClassicHeader(
+          dragText: 'Pull to refresh',
+          armedText: 'Release ready',
+          readyText: 'Refreshing...',
+          processingText: 'Refreshing...',
+          processedText: 'Succeeded',
+          noMoreText: 'No more',
+          failedText: 'Failed',
+          messageText: 'Last updated at %T',
+          textStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 14),
+          messageStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 12),
+          iconTheme: IconThemeData(color: Color(0XFFAECAE5)),
+          backgroundColor: Colors.transparent,
+        );
+    EasyRefresh.defaultFooterBuilder = () => const ClassicFooter(
+          dragText: 'Pull to load',
+          armedText: 'Release ready',
+          readyText: 'Loading...',
+          processingText: 'Loading...',
+          processedText: 'Succeeded',
+          noMoreText: 'No more',
+          failedText: 'Failed',
+          showMessage: false,
+          triggerOffset: 50,
+          iconDimension: 22,
+          textStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 14),
+          messageStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 12),
+          iconTheme: IconThemeData(color: Color(0XFFAECAE5)),
+          backgroundColor: Colors.transparent,
+        );
+
+    /// SmartDialog 配置
+    SmartDialog.config
+      ..custom = SmartConfigCustom(
+        maskColor: Colors.black.withOpacity(0.35),
+        useAnimation: true,
+      )
+      ..attach = SmartConfigAttach(
+        animationType: SmartAnimationType.scale,
+        usePenetrate: false,
+      )
+      ..loading = SmartConfigLoading(
+        backDismiss: true,
+        clickMaskDismiss: true,
+      )
+      ..toast = SmartConfigToast(
+        intervalTime: const Duration(milliseconds: 100),
+        displayTime: const Duration(milliseconds: 2000),
+      );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    //设置全局的状态栏文本样式
+    SystemChrome.setSystemUIOverlayStyle(ThemeConfig.systemUiOverlayStyleLightThemeWhite);
+    final appRouter = AppRouter();
+
+    //路由管理,状态管理,依赖管理一切都始于GetMaterialApp
+    return KeyboardVisibilityBuilder(builder: (context, isKeyboardVisible) {
+      return KeyboardDismissOnTap(
+        dismissOnCapturedTaps: false,
+        child:
+            // MaterialApp(
+            //   //顶部是否展示Debug图标
+            //   debugShowCheckedModeBanner: true,
+            //   //是否展示Log
+            //   enableLog: true,
+            //   //默认路由与路由表的加载
+            //   initialRoute: RouterPath.splash,
+            //   getPages: PageRouter.routes + BasicPageRouter.routes + AuthPageRouter.routes + JobPageRouter.routes + LabourPageRouter.routes +
+            //       ReportPageRouter.routes + LabourSGPageRouter.routes + JobPageSGRouter.routes,
+            //   //对原生导航的兼容;SmartDialog路由配置生命周期处理
+            //   navigatorObservers: [GetXRouterObserver(), FlutterSmartDialog.observer, routeObserver],
+            //   //默认页面动画
+            //   defaultTransition: Transition.rightToLeft,
+            //   smartManagement: SmartManagement.keepFactory,
+            //   //网页Title显示
+            //   title: 'YY Employer',
+            //   //样式相关
+            //   theme: ThemeConfig.lightTheme,
+            //   darkTheme: ThemeConfig.darkTheme,
+            //   themeMode: ThemeMode.light,
+            //   //本地化相关
+            //   locale: TranslationService.locale,
+            //   fallbackLocale: TranslationService.fallbackLocale,
+            //   localizationsDelegates:  const [
+            //     GlobalMaterialLocalizations.delegate,
+            //     GlobalWidgetsLocalizations.delegate,
+            //     GlobalCupertinoLocalizations.delegate,
+            //   ],
+            //   supportedLocales: const [
+            //     Locale('en', 'US'),
+            //     Locale('zh', ''),
+            //     Locale('vi', ''),
+            //   ],
+            //   translations: TranslationService(),
+            //   //SmartDialog初始化默认Loading与Toast
+            //   builder: FlutterSmartDialog.init(
+            //     toastBuilder: (String msg) {
+            //       return CustomToastWidget(msg: msg);
+            //     },
+            //     loadingBuilder: (String msg) {
+            //       return CustomLoadingWidget(msg: msg == 'loading...' ? 'Loading...'.tr : msg);
+            //     },
+            //     notifyStyle: FlutterSmartNotifyStyle(
+            //       successBuilder: (String msg) => CustomSuccessWidget(msg: msg),
+            //       failureBuilder: (String msg) => CustomFailureWidget(msg: msg),
+            //       errorBuilder: (String msg) => CustomErrorWidget(msg: msg),
+            //       alertBuilder: (String msg) => CustomErrorWidget(msg: msg),
+            //       warningBuilder: (String msg) => CustomErrorWidget(msg: msg),
+            //     ),
+            //   ),
+            // ),
+
+        MaterialApp.router(
+          title: 'PropertyManagementSystem',
+          debugShowCheckedModeBanner: true,
+          theme: ThemeData(
+            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
+            useMaterial3: false,
+          ),
+          //AutoRouter的配置
+          routerConfig: appRouter.config(),
+          //SmartDialog初始化默认Loading与Toast
+          builder: FlutterSmartDialog.init(
+            toastBuilder: (String msg) {
+              return CustomToastWidget(msg: msg);
+            },
+            loadingBuilder: (String msg) {
+              return CustomLoadingWidget(msg: msg == 'loading...' ? 'Loading...' : msg);
+            },
+            notifyStyle: FlutterSmartNotifyStyle(
+              successBuilder: (String msg) => CustomSuccessWidget(msg: msg),
+              failureBuilder: (String msg) => CustomFailureWidget(msg: msg),
+              errorBuilder: (String msg) => CustomErrorWidget(msg: msg),
+              alertBuilder: (String msg) => CustomErrorWidget(msg: msg),
+              warningBuilder: (String msg) => CustomErrorWidget(msg: msg),
+            ),
+          ),
+        ),
+      );
+    });
+  }
+}

+ 43 - 0
app/lib/modules/splash/page/splash_page.dart

@@ -0,0 +1,43 @@
+import 'package:flutter/material.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:cs_resources/generated/assets.dart';
+import 'package:shared/utils/size_config.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:auto_route/annotations.dart';
+import '../vm/splash_view_model.dart';
+
+@RoutePage()
+class SplashPage extends HookConsumerWidget {
+  SplashPage({super.key});
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    SizeConfig().init(context);
+
+    ref.watch(splashViewModelProvider);
+
+    return Scaffold(
+      body: Container(
+        decoration: const BoxDecoration(
+          gradient: LinearGradient(
+            colors: [
+              Color(0xFF091D44),
+              Color(0xFF245A8A),
+              Color(0xFF7F7CEC),
+            ],
+            begin: Alignment.topCenter,
+            end: Alignment.bottomCenter,
+          ),
+        ),
+        child: const Center(
+          child: MyAssetImage(
+            Assets.assetsYyBusinessTopLogo,
+            width: 166,
+            height: 67.5,
+            fit: BoxFit.contain,
+          ),
+        ),
+      ),
+    );
+  }
+}

+ 15 - 0
app/lib/modules/splash/vm/splash_view_model.dart

@@ -0,0 +1,15 @@
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:shared/utils/log_utils.dart';
+
+part 'splash_view_model.g.dart';
+
+@riverpod
+class SplashViewModel extends _$SplashViewModel {
+  @override
+  void build() {
+    // 初始构建逻辑
+    Log.e("SplashViewModel -> 初始构建逻辑");
+  }
+
+}

+ 26 - 0
app/lib/modules/splash/vm/splash_view_model.g.dart

@@ -0,0 +1,26 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'splash_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$splashViewModelHash() => r'52066538d069b52acad4fe94c270cd625938daf8';
+
+/// See also [SplashViewModel].
+@ProviderFor(SplashViewModel)
+final splashViewModelProvider =
+    AutoDisposeNotifierProvider<SplashViewModel, void>.internal(
+  SplashViewModel.new,
+  name: r'splashViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$splashViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$SplashViewModel = AutoDisposeNotifier<void>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 15 - 0
app/lib/router/app_page_router.dart

@@ -0,0 +1,15 @@
+import 'package:auto_route/auto_route.dart';
+import 'package:flutter/material.dart';
+import 'package:router/path/router_path.dart';
+
+import '../modules/splash/page/splash_page.dart';
+
+part 'app_page_router.gr.dart';
+
+@AutoRouterConfig(replaceInRouteName: 'Page|Screen,PageRoute')
+class AppRouter extends _$AppRouter {
+  @override
+  List<AutoRoute> get routes => [
+        AutoRoute(page: SplashPageRoute.page, initial: true, path: RouterPath.splash),
+      ];
+}

+ 56 - 0
app/lib/router/app_page_router.gr.dart

@@ -0,0 +1,56 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+// **************************************************************************
+// AutoRouterGenerator
+// **************************************************************************
+
+// ignore_for_file: type=lint
+// coverage:ignore-file
+
+part of 'app_page_router.dart';
+
+abstract class _$AppRouter extends RootStackRouter {
+  // ignore: unused_element
+  _$AppRouter({super.navigatorKey});
+
+  @override
+  final Map<String, PageFactory> pagesMap = {
+    SplashPageRoute.name: (routeData) {
+      final args = routeData.argsAs<SplashPageRouteArgs>(
+          orElse: () => const SplashPageRouteArgs());
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: SplashPage(key: args.key),
+      );
+    }
+  };
+}
+
+/// generated route for
+/// [SplashPage]
+class SplashPageRoute extends PageRouteInfo<SplashPageRouteArgs> {
+  SplashPageRoute({
+    Key? key,
+    List<PageRouteInfo>? children,
+  }) : super(
+          SplashPageRoute.name,
+          args: SplashPageRouteArgs(key: key),
+          initialChildren: children,
+        );
+
+  static const String name = 'SplashPageRoute';
+
+  static const PageInfo<SplashPageRouteArgs> page =
+      PageInfo<SplashPageRouteArgs>(name);
+}
+
+class SplashPageRouteArgs {
+  const SplashPageRouteArgs({this.key});
+
+  final Key? key;
+
+  @override
+  String toString() {
+    return 'SplashPageRouteArgs{key: $key}';
+  }
+}

+ 44 - 0
app/lib/rp_obs/riverpod_observer.dart

@@ -0,0 +1,44 @@
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:shared/utils/log_utils.dart';
+
+class RiverpodObserver extends ProviderObserver {
+
+  @override
+  void didAddProvider(
+      ProviderBase<Object?> provider,
+      Object? value,
+      ProviderContainer container,
+      ) {
+    Log.d('Provider Did Add -> $provider was initialized with $value');
+  }
+
+  @override
+  void didDisposeProvider(
+      ProviderBase<Object?> provider,
+      ProviderContainer container,
+      ) {
+    Log.d('Provider Did Dispose -> $provider was disposed');
+  }
+
+  @override
+  void didUpdateProvider(
+      ProviderBase<Object?> provider,
+      Object? previousValue,
+      Object? newValue,
+      ProviderContainer container,
+      ) {
+    Log.d(
+      'Provider Did Update -> $provider updated from $previousValue to $newValue',
+    );
+  }
+
+  @override
+  void providerDidFail(
+      ProviderBase<Object?> provider,
+      Object error,
+      StackTrace stackTrace,
+      ProviderContainer container,
+      ) {
+    Log.d('Provider Did Fail -> $provider threw $error at $stackTrace');
+  }
+}

+ 115 - 0
app/pubspec.yaml

@@ -0,0 +1,115 @@
+name: app  #宿主App命名空间
+description: Flutter Room 临时项目
+
+version: 1.0.0
+
+environment:
+  sdk: '>=3.0.2 <4.0.0'
+
+dependencies:
+
+  flutter_localizations:
+    sdk: flutter
+
+  flutter:
+    sdk: flutter
+
+  #基础组件的依赖
+  domain:
+    path: ../packages/cs_domain
+
+  plugin_basic:
+    path: ../packages/cs_plugin_basic
+
+  plugin_platform:
+    path: ../packages/cs_plugin_platform
+
+  shared:
+    path: ../packages/cs_shared
+
+  cs_resources:
+    path: ../packages/cs_resources
+
+  router:
+    path: ../packages/cs_router
+
+  widgets:
+    path: ../packages/cs_widgets
+
+  initializer:
+    path: ../packages/cs_initializer
+
+  #业务子组件的依赖
+  cpt_auth:
+    path: ../packages/cpt_auth
+
+  cpt_community:
+    path: ../packages/cpt_community
+
+  cpt_facility:
+    path: ../packages/cpt_facility
+
+  cpt_form:
+    path: ../packages/cpt_form
+
+  cpt_main:
+    path: ../packages/cpt_main
+
+  cpt_notice_board:
+    path: ../packages/cpt_notice_board
+
+  cpt_payment:
+    path: ../packages/cpt_payment
+
+  cpt_profile:
+    path: ../packages/cpt_profile
+
+  cpt_property:
+    path: ../packages/cpt_property
+
+  cpt_rewards:
+    path: ../packages/cpt_rewards
+
+  cpt_services:
+    path: ../packages/cpt_services
+
+  # Riverpod核心库
+  flutter_riverpod: ^2.5.1
+
+  # Riverpod注解
+  riverpod_annotation: ^2.3.5
+
+  # Hooks 简化 Flutter 页面
+  flutter_hooks: ^0.20.5
+
+  # Hooks 简化 Riverpod 获取
+  hooks_riverpod: ^2.5.1
+
+  # 极光推送  https://github.com/jpush/jpush-flutter-plugin
+  #  jpush_flutter: 2.5.1
+
+  #  https://pub-web.flutter-io.cn/packages/flutter_bugly
+#  flutter_bugly: 0.4.4
+
+
+dev_dependencies:
+  flutter_test:
+    sdk: flutter
+
+  flutter_lints: ^4.0.0
+
+  # Dart代码生成文件
+  build_runner: ^2.4.12
+
+  # Riverpod代码生成器
+  riverpod_generator: ^2.4.3
+
+  # 专为Riverpod设计的一套lint规则
+  riverpod_lint: ^2.3.13
+
+  # AutoRouter 生成代码
+  auto_route_generator: ^8.0.0
+
+
+flutter:
+  uses-material-design: true

+ 40 - 0
app/pubspec_overrides.yaml

@@ -0,0 +1,40 @@
+# melos_managed_dependency_overrides: cpt_auth,cpt_community,cpt_facility,cpt_form,cpt_main,cpt_notice_board,cpt_payment,cpt_profile,cpt_rewards,cpt_services,cs_resources,domain,initializer,plugin_basic,plugin_platform,router,shared,widgets,cpt_property
+dependency_overrides:
+  cpt_auth:
+    path: ../packages/cpt_auth
+  cpt_community:
+    path: ../packages/cpt_community
+  cpt_facility:
+    path: ../packages/cpt_facility
+  cpt_form:
+    path: ../packages/cpt_form
+  cpt_main:
+    path: ../packages/cpt_main
+  cpt_notice_board:
+    path: ../packages/cpt_notice_board
+  cpt_payment:
+    path: ../packages/cpt_payment
+  cpt_profile:
+    path: ../packages/cpt_profile
+  cpt_property:
+    path: ../packages/cpt_property
+  cpt_rewards:
+    path: ../packages/cpt_rewards
+  cpt_services:
+    path: ../packages/cpt_services
+  cs_resources:
+    path: ../packages/cs_resources
+  domain:
+    path: ../packages/cs_domain
+  initializer:
+    path: ../packages/cs_initializer
+  plugin_basic:
+    path: ../packages/cs_plugin_basic
+  plugin_platform:
+    path: ../packages/cs_plugin_platform
+  router:
+    path: ../packages/cs_router
+  shared:
+    path: ../packages/cs_shared
+  widgets:
+    path: ../packages/cs_widgets

+ 11 - 0
app/test/widget_test.dart

@@ -0,0 +1,11 @@
+// This is a basic Flutter widget test.
+//
+// To perform an interaction with a widget in your test, use the WidgetTester
+// utility that Flutter provides. For example, you can send tap and scroll
+// gestures. You can also use WidgetTester to find child widgets in the widget
+// tree, read text, and verify that the values of widget properties are correct.
+
+
+void main() {
+
+}

+ 28 - 0
app/web/index.html

@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <meta content="IE=Edge" http-equiv="X-UA-Compatible">
+
+    <!-- iOS meta tags & icons -->
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <meta name="apple-mobile-web-app-title" content="EasyRefresh">
+    <link rel="apple-touch-icon" href="icons/Icon-192.png">
+
+    <title>YY Employer</title>
+
+</head>
+<body>
+
+<script>
+    if ('serviceWorker' in navigator) {
+      window.addEventListener('load', function () {
+        navigator.serviceWorker.register('flutter_service_worker.js');
+      });
+    }
+  </script>
+
+<script src="main.dart.js" type="application/javascript"></script>
+</body>
+</html>

+ 79 - 0
melos.yaml

@@ -0,0 +1,79 @@
+name: Property-Management
+packages:
+  - "app/"
+  - "packages/cs_domain/"
+  - "packages/cs_resources/"
+  - "packages/cs_router/"
+  - "packages/cs_shared/"
+  - "packages/cs_widgets/"
+  - "packages/cs_plugin_basic/"
+  - "packages/cs_plugin_platform/"
+  - "packages/cs_initializer/"
+  - "packages/cpt_auth/"
+  - "packages/cpt_community/"
+  - "packages/cpt_facility/"
+  - "packages/cpt_form/"
+  - "packages/cpt_main/"
+  - "packages/cpt_notice_board/"
+  - "packages/cpt_payment/"
+  - "packages/cpt_profile/"
+  - "packages/cpt_property/"
+  - "packages/cpt_rewards/"
+  - "packages/cpt_services/"
+
+
+command:
+  bootstrap:
+    usePubspecOverrides: true
+
+
+scripts:
+  analyze:
+    run: melos exec -- "flutter analyze"
+    description: 运行 flutter analyze 执行优化命令
+
+  pub_get_all:
+    run: dart pub global run melos exec --flutter "flutter pub get"
+    description: 在每个子组件中运行 flutter pub get,用来获取和安装这些包的所有依赖
+
+  build_runner_all:
+    run: dart pub global run melos exec -- "dart run build_runner build"
+    description: 如果模块包含 build_runner,执行 build_runner build 命令
+    filters:
+      dependsOn:
+        - build_runner
+
+  clean_all:
+    run: melos exec -- "flutter clean"
+    description: Run `flutter clean` in all packages
+
+  clean_app:
+    run: cd "$MELOS_ROOT_PATH/app" && flutter clean
+    description: Run `flutter clean` in app module
+
+  run_app:
+    run: cd "$MELOS_ROOT_PATH/app" && flutter run
+    description: 运行App模块.
+
+  run_app2:
+    run: melos exec --scope="app" -- "flutter run"
+    description: 运行App模块方式2.
+
+  build_apk:
+    run: cd "$MELOS_ROOT_PATH/app" && flutter build apk
+    description: 编译安卓Release的APK格式安装包.
+
+  resource_get:
+    run: |
+      cd "$MELOS_ROOT_PATH/packages/cs_domain/" && flutter pub get
+      melos exec --scope="cs_resources" -- "flutter pub get"
+      cd "$MELOS_ROOT_PATH/packages/cs_widgets/" && flutter pub get
+    description: 更新实体和资源模块
+
+  format:
+    run: melos exec -- "flutter format . --set-exit-if-changed"
+    description: Run `flutter format .` in all packages
+
+  test:
+    run: melos exec --dir-exists=test -- "flutter test"
+    description: Run `flutter test` in all packages

+ 31 - 0
packages/cpt_auth/.gitignore

@@ -0,0 +1,31 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+*.lock
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# Visual Studio Code related
+.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+proguardMapping.txt

+ 60 - 0
packages/cpt_auth/pubspec.yaml

@@ -0,0 +1,60 @@
+name: cpt_auth
+description: 物业系统的用户模块,用户的登录注册、密码信息、户主绑定等功能
+
+version: 1.0.0
+
+environment:
+  sdk: '>=3.0.2 <4.0.0'
+
+dependencies:
+
+  flutter_localizations:
+    sdk: flutter
+
+  flutter:
+    sdk: flutter
+
+  #基础组件的依赖
+  domain:
+    path: ../cs_domain
+
+  plugin_basic:
+    path: ../cs_plugin_basic
+
+  plugin_platform:
+    path: ../cs_plugin_platform
+
+  shared:
+    path: ../cs_shared
+
+  cs_resources:
+    path: ../cs_resources
+
+  router:
+    path: ../cs_router
+
+  widgets:
+    path: ../cs_widgets
+
+
+dev_dependencies:
+  flutter_test:
+    sdk: flutter
+
+  flutter_lints: ^4.0.0
+
+  # Dart代码生成文件
+  build_runner: ^2.4.12
+
+  # Riverpod代码生成器
+  riverpod_generator: ^2.4.3
+
+  # 专为Riverpod设计的一套lint规则
+  riverpod_lint: ^2.3.13
+
+  # AutoRouter 生成代码
+  auto_route_generator: ^8.0.0
+
+
+flutter:
+  uses-material-design: true

+ 0 - 0
packages/cpt_auth/pubspec_overrides.yaml


Some files were not shown because too many files changed in this diff