diff --git a/circle_app/android/app/build.gradle b/circle_app/android/app/build.gradle index 99f51ff..3f2ea8b 100644 --- a/circle_app/android/app/build.gradle +++ b/circle_app/android/app/build.gradle @@ -71,8 +71,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 21 targetSdkVersion flutter.targetSdkVersion - versionCode 95 - versionName "2.5.0" + versionCode 97 + versionName "2.5.2" manifestPlaceholders = [ vivo_APPID: "105669716", vivo_APPKEY:"84f750207787376b310ca5b0d5969122", diff --git a/circle_app/android/app/proguard-rules.pro b/circle_app/android/app/proguard-rules.pro index 721ed72..08ec32c 100644 --- a/circle_app/android/app/proguard-rules.pro +++ b/circle_app/android/app/proguard-rules.pro @@ -34,4 +34,30 @@ -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); +} + +-dontwarn com.cmic.sso.sdk.** +-keep class com.cmic.sso.**{*;} +-dontwarn com.sdk.** +-keep class com.sdk.** { *;} +-keep class cn.com.chinatelecom.account.**{*;} +-keep public class * extends android.view.View +-keep class com.netease.nis.quicklogin.entity.**{*;} +-keep class com.netease.nis.quicklogin.listener.**{*;} +-keep class com.netease.nis.quicklogin.QuickLogin{ + public ; + public ; +} +-keep class com.netease.nis.quicklogin.helper.UnifyUiConfig{*;} +-keep class com.netease.nis.quicklogin.helper.UnifyUiConfig$Builder{ + public ; + public ; + } +-keep class com.netease.nis.quicklogin.utils.LoginUiHelper$CustomViewListener{ + public ; + public ; +} +-keep class com.netease.nis.basesdk.**{ + public *; + protected *; } \ No newline at end of file diff --git a/circle_app/android/app/src/main/res/drawable/check.png b/circle_app/android/app/src/main/res/drawable/check.png new file mode 100644 index 0000000..2ad67aa Binary files /dev/null and b/circle_app/android/app/src/main/res/drawable/check.png differ diff --git a/circle_app/android/app/src/main/res/drawable/left_bt_bg.png b/circle_app/android/app/src/main/res/drawable/left_bt_bg.png new file mode 100644 index 0000000..deaba01 Binary files /dev/null and b/circle_app/android/app/src/main/res/drawable/left_bt_bg.png differ diff --git a/circle_app/android/app/src/main/res/drawable/login_btn_bg.png b/circle_app/android/app/src/main/res/drawable/login_btn_bg.png new file mode 100644 index 0000000..ea11b2d Binary files /dev/null and b/circle_app/android/app/src/main/res/drawable/login_btn_bg.png differ diff --git a/circle_app/android/app/src/main/res/drawable/login_logo.png b/circle_app/android/app/src/main/res/drawable/login_logo.png new file mode 100644 index 0000000..cf3bc73 Binary files /dev/null and b/circle_app/android/app/src/main/res/drawable/login_logo.png differ diff --git a/circle_app/android/app/src/main/res/drawable/right_bt_bg.png b/circle_app/android/app/src/main/res/drawable/right_bt_bg.png new file mode 100644 index 0000000..2eaf096 Binary files /dev/null and b/circle_app/android/app/src/main/res/drawable/right_bt_bg.png differ diff --git a/circle_app/data/android-light-config.json b/circle_app/data/android-light-config.json new file mode 100644 index 0000000..ade8f33 --- /dev/null +++ b/circle_app/data/android-light-config.json @@ -0,0 +1,109 @@ +{ + "statusBarColor": "#18181A", + "isStatusBarDarkColor": false, + "isHideBackIcon": true, + "navBackgroundColor": "#00000000", + "isHideNav": true, + "logoIconName": "login_logo", + "logoWidth": 90, + "logoHeight": 90, + "logoTopYOffset": 132, + "maskNumberColor": "#000000", + "maskNumberDpSize": 24, + "maskNumberTopYOffset": 300, + "maskNumberWidth": 222, + "maskNumberHeight": 24, + "sloganDpSize": 12, + "sloganColor": "#999999", + "sloganTopYOffset": 334, + "loginBtnText": "本机号码一键登录", + "loginBtnTextDpSize": 18, + "loginBtnTextColor": "#ffffff", + "loginBtnWidth": 311, + "loginBtnHeight": 48, + "loginBtnMarginLeft": 32, + "loginBtnMarginRight": 32, + "loginBtnBackgroundRes": "login_btn_bg", + "loginBtnTopYOffset": 398, + "privacyTextColor": "#000000", + "privacyProtocolColor": "#C178FF", + "privacyDpSize": 12, + "privacyBottomYOffset": 66, + "privacyMarginLeft": 44, + "privacyMarginRight": 44, + "privacyState": false, + "isPrivacyTextGravityCenter": true, + "checkBoxWith": 15, + "checkBoxHeight": 15, + "backgroundImage": "bg", + "checkedImageName": "check", + "unCheckedImageName": "uncheck", + "privacyTextStart": "我已阅读并同意", + "protocolText": "用户服务协议", + "protocol2Text": "隐私协议", + "privacyDialogWidth": 291, + "privacyDialogHeight": 240, + "privacyDialogTitleSize": 18, + "privacyDialogTitle": "用户协议和隐私政策", + "isPrivacyDialogTitleBold": true, + "privacyDialogSize": 14, + "privacyDialogTextColor": "#999999", + "privacyDialogTitleMarginTop": 25, + "privacyDialogContentStart": "我已阅读并同意", + "privacyDialogBtnTextSize": 16, + "privacyDialogBtnAgreeTextColor": "#ffffff", + "privacyDialogBtnDisagreeTextColor": "#999999", + "privacyDialogContentMarginLeft": 20, + "privacyDialogContentMarginRight": 20, + "privacyDialogBtnAgreeText": "同意", + "privacyDialogBtnDisagreeText": "不同意", + "privacyDialogBtnHeight": 40, + "privacyDialogBtnMarginBottom": 25, + "privacyDialogBtnMarginLeft": 16, + "privacyDialogBtnMarginRight": 16, + "privacyDialogBtnAgreeBg": "right_bt_bg", + "privacyDialogBtnDisagreeBg": "left_bt_bg", + "privacyDialogProtocolColor": "#B35AFF", + "privacyDialogContentEnd": ",并授权微乐园获得本机号码。未注册的手机号验证通过后将自动完成注册。", + "widgets": [ + { + "viewId": "otherLogin", + "type": "TextView", + "top": 462, + "left": 126, + "right": 126, + "width": 120, + "height": 16, + "isGravityCenter": true, + "text": "其他方式登录", + "font": 14, + "textColor": "#333333", + "clickable": true, + "action": "otherLogin" + }, + { + "viewId": "arrow", + "type": "ImageView", + "top": 464, + "left": 228, + "right": 134, + "width": 13, + "height": 13, + "clickable": true, + "backgroundImgPath": "right_click", + "action": "otherLogin" + }, + { + "viewId": "wechat", + "type": "ImageView", + "top": 0, + "left": 263, + "right": 16, + "width": 95, + "height": 30, + "clickable": true, + "backgroundImgPath": "online", + "action": "onlineLogin" + } + ] +} \ No newline at end of file diff --git a/circle_app/data/img/mine/version_icon.png b/circle_app/data/img/mine/version_icon.png new file mode 100644 index 0000000..5cc6452 Binary files /dev/null and b/circle_app/data/img/mine/version_icon.png differ diff --git a/circle_app/data/ios-light-config.json b/circle_app/data/ios-light-config.json new file mode 100644 index 0000000..e910739 --- /dev/null +++ b/circle_app/data/ios-light-config.json @@ -0,0 +1,201 @@ +{ + "presentDirectionType" : 2, + "toastWidth" : 300, + "toastHeight" : 250, + "toastBackgroundColor" : "#FFFFFF", + "toastCornerRadius" : 8, + "toastTitleText" : "服务协议及隐私", + "toastTitleTextColor" : "#000000", + "toastTitleFontSize" : 18, + "toastTitleFontWeight" : "bold", + "toastContentPrefixText" : "为了更好地保障您的合法权益,请您阅读并同意以下协议", + "toastContentSuffixText" : "", + "toastContentTextColor" : "#333333", + "toastContentFontSize" : 14, + "toastContentFontWeight" : "thin", + "toastContentLineSpacing" : 1, + "toastContentWordSpacing" : 1, + "toastCancelWidth" : 120, + "toastCancelHeight" : 40, + "toastCancelText" : "拒绝", + "toastCancelTextColor" : "#000000", + "toastCancelFontSize" : 15, + "toastCancelFontWeight" : "regular", + "toastCancelCornerRadius" : 20, + "toastCancelBackgroundColor" : "#FFFFFF", + "toastCancelBorderColor" : "#000000", + "toastConfirmWidth" : 120, + "toastConfirmHeight" : 40, + "toastConfirmText" : "同意", + "toastConfirmTextColor" : "#FFFFFF", + "toastConfirmFontSize" : 15, + "toastConfirmFontWeight" : "bold", + "toastConfirmCornerRadius" : 20, + "toastConfirmBackgroundColor" : "#3478F7", + "toastConfirmBorderColor" : "#3478F7", + "toastTitleToContentSpace" : 20, + "toastContentToButtonSpace" : 20, + "toastEdgeInsetsTop" : 20, + "toastEdgeInsetsBottom" : 20, + "toastEdgeInsetsLeft" : 20, + "toastEdgeInsetsRight" : 20, + "colors": ["#06F9FA", "#DC5BFD"], + "startPointX": "0.0", + "startPointY": "0.5", + "endPointX": "1.0", + "endPointY": "0.5", + "backgroundColor": "#FFFFFF", + "navBarHidden": false, + "navBgColor": "#3478F7", + "navText": "一键登录", + "navTextFont": 16, + "navTextColor": "#ffffff", + "navTextHidden": false, + "navReturnImg": "static/qq.png", + "navReturnImgLeftMargin": 0, + "navReturnImgBottomMargin": 0, + "navReturnImgWidth": 60, + "navReturnImgHeight": 60, + "logoIconName": "splash_icon.png", + "logoWidth": 50, + "logoHeight": 50, + "logoOffsetX": 0, + "logoHidden": false, + "logoOffsetTopY": 50, + "numberColor": "#000000", + "numberOffsetX": 0, + "numberHeight": 50, + "numberFontSize": 18, + "numberFontWeight": "bold", + "numberCornerRadius": 10, + "numberLeftContent": "", + "numberRightContent": "", + "numberOffsetTopY": "100", + "brandColor": "#000000", + "brandWidth": 100, + "brandHeight": 20, + "brandFontSize": 14, + "brandFontWeight": "regular", + "brandOffsetX": 0, + "brandHidden": false, + "brandLogoOffsetMargin": 0, + "brandLogoWidth": 50, + "brandLogoHeight": 50, + "brandOffsetTopY": 170, + "logBtnText": "确定登录", + "logBtnTextFontSize": 16, + "logBtnTextFontWeight": "bold", + "logBtnTextColor": "#ffffff", + "logBtnRadius": 20, + "logBtnHeight": 40, + "logBtnOriginLeft": 80, + "logBtnOriginRight": 80, + "logBtnUsableBGColor": "#0099FF", + "logBtnOffsetTopY": 230, + "logBtnEnableImg": "logo", + "logBtnHighlightedImg": "pic_success", + "checkedImageName": "static/checkedImageName.png", + "unCheckedImageName": "static/unCheckedImageName.png", + "checkboxWH": 50, + "privacyState": true, + "checkedHidden": false, + "checkBoxAlignment": 0, + "checkBoxMargin": 0, + "appPrivacyOriginLeft": 40, + "appPrivacyOriginRight": 40, + "appPrivacyText": "登录即同意《默认》并授权获得《用户政策》和《用户隐私协议》以及《用户行为准则》和《用户相关条令》", + "appFPrivacyText": "《用户政策》", + "appFPrivacyURL": "https://dun.163.com/?from=baiduP_PP_PP664&sdclkid=AL2N15fsbJDiALjpALAD", + "appSPrivacyText": "《用户隐私协议》", + "appSPrivacyURL": "https://dun.163.com/?from=baiduP_PP_PP664&sdclkid=AL2N15fsbJDiALjpALAD", + "appTPrivacyText": "《用户行为准则》", + "appTPrivacyURL": "https://dun.163.com/?from=baiduP_PP_PP664&sdclkid=AL2N15fsbJDiALjpALAD", + "appFourPrivacyText": "《用户相关条令》", + "appFourPrivacyURL": "https://dun.163.com/?from=baiduP_PP_PP664&sdclkid=AL2N15fsbJDiALjpALAD", + "appPrivacyAlignment": 0, + "appPrivacyOriginLeftMargin": 60, + "appPrivacyOriginBottomMargin": 60, + "shouldHiddenPrivacyMarks": 0, + "privacyNavReturnImg": "static/back.jpg", + "privacyFontSize": 12, + "privacyFontWeight": "thin", + "privacyColor": "#000000", + "protocolColor": "#3478F7", + + "authWindowPop": 0, + "scaleW": 0.9, + "scaleH": 0.5, + "closePopImg": "back", + "closePopImgWidth": 20, + "closePopImgHeight": 20, + "closePopImgOriginY": -10, + "closePopImgOriginX": -10, + "authWindowCenterOriginY": 0, + "authWindowCenterOriginX": 0, + "popCenterCornerRadius": 16, + "popBottomCornerRadius": 10, + "popBackgroundColor": "#0099FF", + "alpha": 0.5, + "isOpenSwipeGesture": true, + + "isRepeatPlay": "YES", + "localVideoFileName": "video_portrait.mp4", + "animationDuration": 2, + "animationRepeatCount": 1000, + + "bgImage":"launchImage.png", + "launchImage":"kj_pic_bg", + "faceOrientation" : 0, + "modalTransitionStyle": 0, + "showPrivacyDialog": 0, + + "statusBarStyle": 0, + "widgets": [ + { + "type": "UIButton", + "UIButtonType": 0, + "image": "static/weixin.png", + "title": "", + "titleColor": "#000000", + "titleFont": 12, + "cornerRadius": 20, + "action": "handleCustomEvent1", + "frame": {"mainScreenLeftDistance":100,"mainScreenTopDistance":360,"width":32,"height":32}, + "backgroundImage":"" + }, + { + "type": "UIButton", + "UIButtonType": 0, + "image": "static/qq.png", + "title": "", + "titleColor": "#FFFFFF", + "titleFont": 12, + "cornerRadius": 20, + "action": "handleCustomEvent2", + "frame": {"mainScreenCenterXWithLeftDistance":0,"mainScreenTopDistance":360,"width":32,"height":32}, + "backgroundImage": "" + }, + { + "type": "UIButton", + "UIButtonType": 0, + "image": "static/weibo.png", + "title": "", + "titleColor": "#FFFFFF", + "titleFont": 12, + "cornerRadius": 20, + "action": "handleCustomEvent3", + "frame": {"mainScreenRightDistance":100,"mainScreenTopDistance":360,"width":32,"height":32}, + "backgroundImage": "" + }, + { + "type": "UILabel", + "textColor": "#000000", + "font": 15, + "action": "handleCustomLabel", + "text": "其他方式登录", + "backgroundColor":"#FFFFFF", + "textAlignment": 1, + "frame": {"mainScreenCenterXWithLeftDistance":0,"mainScreenTopDistance":310,"width":200,"height":32} + } + ] +} diff --git a/circle_app/ios/Podfile.lock b/circle_app/ios/Podfile.lock index e70268d..8296d4a 100644 --- a/circle_app/ios/Podfile.lock +++ b/circle_app/ios/Podfile.lock @@ -103,6 +103,9 @@ PODS: - Mantle/extobjc (2.2.0) - notification_permissions (0.4.4): - Flutter + - NTESBaseComponent (1.9) + - NTESQuickPass (3.6.4): + - NTESBaseComponent - package_info_plus (0.4.5): - Flutter - pasteboard (0.0.1): @@ -117,6 +120,9 @@ PODS: - FlutterMacOS - plain_notification_token_for_us (0.0.1): - Flutter + - quickpass_yidun_flutter (0.0.1): + - Flutter + - NTESQuickPass (= 3.6.4) - Reachability (3.2) - ReactiveObjC (3.1.1) - SDWebImage (5.18.5): @@ -206,6 +212,7 @@ DEPENDENCIES: - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - photo_manager (from `.symlinks/plugins/photo_manager/ios`) - plain_notification_token_for_us (from `.symlinks/plugins/plain_notification_token_for_us/ios`) + - quickpass_yidun_flutter (from `.symlinks/plugins/quickpass_yidun_flutter/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`) - sqflite (from `.symlinks/plugins/sqflite/ios`) - tencent_chat_push_for_china (from `.symlinks/plugins/tencent_chat_push_for_china/ios`) @@ -228,6 +235,8 @@ SPEC REPOS: - HydraAsync - libwebp - Mantle + - NTESBaseComponent + - NTESQuickPass - Reachability - ReactiveObjC - SDWebImage @@ -298,6 +307,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/photo_manager/ios" plain_notification_token_for_us: :path: ".symlinks/plugins/plain_notification_token_for_us/ios" + quickpass_yidun_flutter: + :path: ".symlinks/plugins/quickpass_yidun_flutter/ios" shared_preferences_foundation: :path: ".symlinks/plugins/shared_preferences_foundation/ios" sqflite: @@ -354,12 +365,15 @@ SPEC CHECKSUMS: local_notifications_for_us: d4bb63b93eb429c4697edd0ee66bbe8bade29633 Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d notification_permissions: 825ea1bf2a52ab585c53fd7b5e8e96876d735d4b + NTESBaseComponent: 6d1fd6802c2340005d35db9daafe15ee6b9b976c + NTESQuickPass: 35dcb9c05c879c4c68cea40a8c0f3e2ea3c9c696 package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e pasteboard: 982969ebaa7c78af3e6cc7761e8f5e77565d9ce0 path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6 photo_manager: 4f6810b7dfc4feb03b461ac1a70dacf91fba7604 plain_notification_token_for_us: c804c7a9f79af55980cec08457cb8cdf73200db7 + quickpass_yidun_flutter: ee1e837b4a253e422111cd7681162ab667eb8b30 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040 SDWebImage: 7ac2b7ddc5e8484c79aa90fc4e30b149d6a2c88f diff --git a/circle_app/ios/Runner.xcodeproj/project.pbxproj b/circle_app/ios/Runner.xcodeproj/project.pbxproj index 728f00e..b4a9e04 100644 --- a/circle_app/ios/Runner.xcodeproj/project.pbxproj +++ b/circle_app/ios/Runner.xcodeproj/project.pbxproj @@ -139,6 +139,7 @@ 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 596550B3B6FD4574F751EEF4 /* [CP] Embed Pods Frameworks */, + 9BBB3F987D37397FD780C20F /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -244,6 +245,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + 9BBB3F987D37397FD780C20F /* [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; + }; A37C0AA62211F95AD4A4D561 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/circle_app/ios/Runner/Assets.xcassets/check_image.imageset/Contents.json b/circle_app/ios/Runner/Assets.xcassets/check_image.imageset/Contents.json new file mode 100644 index 0000000..459c924 --- /dev/null +++ b/circle_app/ios/Runner/Assets.xcassets/check_image.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "umcsdk_check_image.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/circle_app/ios/Runner/Assets.xcassets/check_image.imageset/umcsdk_check_image.png b/circle_app/ios/Runner/Assets.xcassets/check_image.imageset/umcsdk_check_image.png new file mode 100644 index 0000000..81f3b47 Binary files /dev/null and b/circle_app/ios/Runner/Assets.xcassets/check_image.imageset/umcsdk_check_image.png differ diff --git a/circle_app/ios/Runner/Assets.xcassets/checkedImageName.imageset/Contents.json b/circle_app/ios/Runner/Assets.xcassets/checkedImageName.imageset/Contents.json new file mode 100644 index 0000000..9fbeb69 --- /dev/null +++ b/circle_app/ios/Runner/Assets.xcassets/checkedImageName.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "checkedImageName.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/circle_app/ios/Runner/Assets.xcassets/checkedImageName.imageset/checkedImageName.png b/circle_app/ios/Runner/Assets.xcassets/checkedImageName.imageset/checkedImageName.png new file mode 100644 index 0000000..5f6cb47 Binary files /dev/null and b/circle_app/ios/Runner/Assets.xcassets/checkedImageName.imageset/checkedImageName.png differ diff --git a/circle_app/ios/Runner/Assets.xcassets/login_btn_normal.imageset/Contents.json b/circle_app/ios/Runner/Assets.xcassets/login_btn_normal.imageset/Contents.json new file mode 100644 index 0000000..033ae70 --- /dev/null +++ b/circle_app/ios/Runner/Assets.xcassets/login_btn_normal.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "umcsdk_login_btn_normal.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/circle_app/ios/Runner/Assets.xcassets/login_btn_normal.imageset/umcsdk_login_btn_normal.png b/circle_app/ios/Runner/Assets.xcassets/login_btn_normal.imageset/umcsdk_login_btn_normal.png new file mode 100644 index 0000000..4467ae9 Binary files /dev/null and b/circle_app/ios/Runner/Assets.xcassets/login_btn_normal.imageset/umcsdk_login_btn_normal.png differ diff --git a/circle_app/ios/Runner/Assets.xcassets/login_btn_press.imageset/Contents.json b/circle_app/ios/Runner/Assets.xcassets/login_btn_press.imageset/Contents.json new file mode 100644 index 0000000..6e06fba --- /dev/null +++ b/circle_app/ios/Runner/Assets.xcassets/login_btn_press.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "umcsdk_login_btn_press.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/circle_app/ios/Runner/Assets.xcassets/login_btn_press.imageset/umcsdk_login_btn_press.png b/circle_app/ios/Runner/Assets.xcassets/login_btn_press.imageset/umcsdk_login_btn_press.png new file mode 100644 index 0000000..65f8929 Binary files /dev/null and b/circle_app/ios/Runner/Assets.xcassets/login_btn_press.imageset/umcsdk_login_btn_press.png differ diff --git a/circle_app/ios/Runner/Assets.xcassets/login_btn_unable.imageset/Contents.json b/circle_app/ios/Runner/Assets.xcassets/login_btn_unable.imageset/Contents.json new file mode 100644 index 0000000..dbd9509 --- /dev/null +++ b/circle_app/ios/Runner/Assets.xcassets/login_btn_unable.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "umcsdk_login_btn_unable.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/circle_app/ios/Runner/Assets.xcassets/login_btn_unable.imageset/umcsdk_login_btn_unable.png b/circle_app/ios/Runner/Assets.xcassets/login_btn_unable.imageset/umcsdk_login_btn_unable.png new file mode 100644 index 0000000..02943da Binary files /dev/null and b/circle_app/ios/Runner/Assets.xcassets/login_btn_unable.imageset/umcsdk_login_btn_unable.png differ diff --git a/circle_app/ios/Runner/Assets.xcassets/return_bg.imageset/Contents.json b/circle_app/ios/Runner/Assets.xcassets/return_bg.imageset/Contents.json new file mode 100644 index 0000000..3aca4fe --- /dev/null +++ b/circle_app/ios/Runner/Assets.xcassets/return_bg.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "umcsdk_return_bg.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/circle_app/ios/Runner/Assets.xcassets/return_bg.imageset/umcsdk_return_bg.png b/circle_app/ios/Runner/Assets.xcassets/return_bg.imageset/umcsdk_return_bg.png new file mode 100644 index 0000000..85818f2 Binary files /dev/null and b/circle_app/ios/Runner/Assets.xcassets/return_bg.imageset/umcsdk_return_bg.png differ diff --git a/circle_app/ios/Runner/Assets.xcassets/unCheckedImageName.imageset/Contents.json b/circle_app/ios/Runner/Assets.xcassets/unCheckedImageName.imageset/Contents.json new file mode 100644 index 0000000..d31146f --- /dev/null +++ b/circle_app/ios/Runner/Assets.xcassets/unCheckedImageName.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "unCheckedImageName.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/circle_app/ios/Runner/Assets.xcassets/unCheckedImageName.imageset/unCheckedImageName.png b/circle_app/ios/Runner/Assets.xcassets/unCheckedImageName.imageset/unCheckedImageName.png new file mode 100644 index 0000000..81bfb5f Binary files /dev/null and b/circle_app/ios/Runner/Assets.xcassets/unCheckedImageName.imageset/unCheckedImageName.png differ diff --git a/circle_app/ios/Runner/Assets.xcassets/uncheck_image.imageset/Contents.json b/circle_app/ios/Runner/Assets.xcassets/uncheck_image.imageset/Contents.json new file mode 100644 index 0000000..0fdecef --- /dev/null +++ b/circle_app/ios/Runner/Assets.xcassets/uncheck_image.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "umcsdk_uncheck_image.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/circle_app/ios/Runner/Assets.xcassets/uncheck_image.imageset/umcsdk_uncheck_image.png b/circle_app/ios/Runner/Assets.xcassets/uncheck_image.imageset/umcsdk_uncheck_image.png new file mode 100644 index 0000000..d9c7fac Binary files /dev/null and b/circle_app/ios/Runner/Assets.xcassets/uncheck_image.imageset/umcsdk_uncheck_image.png differ diff --git a/circle_app/lib 2.zip b/circle_app/lib 2.zip deleted file mode 100644 index 1119d6b..0000000 Binary files a/circle_app/lib 2.zip and /dev/null differ diff --git a/circle_app/lib/circle_app/circle/logic.dart b/circle_app/lib/circle_app/circle/logic.dart index 77ec043..86ec1f3 100644 --- a/circle_app/lib/circle_app/circle/logic.dart +++ b/circle_app/lib/circle_app/circle/logic.dart @@ -183,6 +183,7 @@ final ScrollController nearScrollController = ScrollController(); void loadNewUserRewardData() async { var data = await DioManager.instance.get(url: Api.newUserConfig); if (data['code'] == 200) { + if (Get.currentRoute == Routes.Chat) return; if (data['data']['isShow']) { if (!data['data']['todayHasReceivedReward']) { Get.bottomSheet( diff --git a/circle_app/lib/circle_app/dialog/UpdateDialog.dart b/circle_app/lib/circle_app/dialog/UpdateDialog.dart index 47aa9c7..790bcc3 100644 --- a/circle_app/lib/circle_app/dialog/UpdateDialog.dart +++ b/circle_app/lib/circle_app/dialog/UpdateDialog.dart @@ -170,17 +170,18 @@ class _CustomDialogState extends State { throw 'Could not open App Store.'; } }, - child:isShowWeb? Container( - margin: EdgeInsets.only(top: 10.sp), + child:Container( + margin: EdgeInsets.only(top: 0.sp), child: Text( - "下载太慢?试试浏览器下载吧。", + "下载太慢或安装不成功?前往官网下载安装哈", style: TextStyle( color: Colors.blue, // 设置蓝色颜色 + fontSize: 13.sp, decoration: TextDecoration.underline, // 添加下划线 ), ), - ): Container(), + ), ) ], ), @@ -205,10 +206,9 @@ class _CustomDialogState extends State { if (appStoreUrl.contains("apk")) { updataApk(appStoreUrl); setDownloadUi(); - Future.delayed(Duration(seconds: 10),() { - setState(() { - isShowWeb = true; - }); + isShowWeb = true; + setState(() { + }); } else { if (await canLaunch(appStoreUrl)) { diff --git a/circle_app/lib/circle_app/home/logic.dart b/circle_app/lib/circle_app/home/logic.dart index adcf45d..2eee84e 100644 --- a/circle_app/lib/circle_app/home/logic.dart +++ b/circle_app/lib/circle_app/home/logic.dart @@ -640,7 +640,7 @@ class HomeLogic extends GetxController with WidgetsBindingObserver { data['data']['account_id'].toString(), data['data']['user_sig']); accountId = data['data']['account_id'].toString(); } else { - if (Get.currentRoute != Routes.Login || data['code'] >= 500) { + if (Get.currentRoute != Routes.Login && data['code'] >= 500) { getIMData(); } } @@ -812,6 +812,7 @@ class HomeLogic extends GetxController with WidgetsBindingObserver { Future.delayed(Duration(seconds: 30), () async { SharedPreferencesHelper sp = await SharedPreferencesHelper.getInstance(); if (await sp.isFirstAutoMatch()) { + if (Get.currentRoute == Routes.Chat) return; var data = await DioManager.instance.get( url: Api.dayOnline, ); diff --git a/circle_app/lib/circle_app/home/view.dart b/circle_app/lib/circle_app/home/view.dart index 0fdb08e..b350f74 100644 --- a/circle_app/lib/circle_app/home/view.dart +++ b/circle_app/lib/circle_app/home/view.dart @@ -81,6 +81,7 @@ class _HomePageState extends State }); vipNotifySub = EventBusManager.on().listen((event) { + if (Get.currentRoute == Routes.Chat) return; showFloatingCallOutVipOverlay(event.info); }); diff --git a/circle_app/lib/circle_app/login/login/logic.dart b/circle_app/lib/circle_app/login/login/logic.dart index 3eeace4..9f71872 100644 --- a/circle_app/lib/circle_app/login/login/logic.dart +++ b/circle_app/lib/circle_app/login/login/logic.dart @@ -1,4 +1,6 @@ import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; import 'package:http/http.dart' as http; import 'package:circle_app/circle_app/minefragment/logic.dart'; import 'package:circle_app/net/dio_manager.dart'; @@ -10,6 +12,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; +import 'package:quickpass_yidun_flutter/quickpass_flutter_plugin.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../../net/api.dart'; @@ -18,6 +21,8 @@ import 'state.dart'; class LoginLogic extends GetxController { bool check = false; + final QuickpassFlutterPlugin quickLoginPlugin = new QuickpassFlutterPlugin(); + var eventChannel = const EventChannel("yd_quicklogin_flutter_event_channel"); // 0短信 1密码 int loginType = 0; @@ -34,8 +39,6 @@ class LoginLogic extends GetxController { // TODO: implement onReady super.onReady(); FlutterNativeSplash.remove(); - - } @override @@ -51,28 +54,26 @@ class LoginLogic extends GetxController { await sharedPreferences.getString(SharedPreferencesHelper.LOGINPHONE) ?? ""; String pwd = - await sharedPreferences.getString(SharedPreferencesHelper.PWD) ?? - ""; + await sharedPreferences.getString(SharedPreferencesHelper.PWD) ?? ""; print(loginPhone); phoneEditingController.text = loginPhone; if (GetUtils.isPhoneNumber(loginPhone) && loginPhone.length == 11) { isPhone = true; - } if (phoneEditingController.text.isEmpty) { readClipboardData(); } - if (sharedPreferences!.containsKey(SharedPreferencesHelper.firstLogin) && pwd.isNotEmpty) { + if (sharedPreferences!.containsKey(SharedPreferencesHelper.firstLogin) && + pwd.isNotEmpty) { loginType = 1; pwdEditingController.text = pwd; } - + isInitSuccess(); update(); } - final LoginState state = LoginState(); TextEditingController phoneEditingController = TextEditingController(); TextEditingController codeEditingController = TextEditingController(); @@ -82,6 +83,8 @@ class LoginLogic extends GetxController { int seconds = 60; Timer? t; + bool isWaitPre = false; + checkNetworkUrl() async { var data = await DioManager.instance.get(url: Api.bizdomain); if (data['code'] == 200) { @@ -91,7 +94,6 @@ class LoginLogic extends GetxController { } } - Future findFastestDomain(List domains) async { final responseTimes = {}; @@ -134,7 +136,6 @@ class LoginLogic extends GetxController { } } - //倒计时 starDownTimer() { if (sendCodeBtn == false && seconds == 60) { @@ -158,6 +159,133 @@ class LoginLogic extends GetxController { } } + /// sdk 初始化是否完成 + void isInitSuccess() async { + var result = + await quickLoginPlugin.init("55aaa02cbbfe4e0fa6be83e2b4df2d26", 4); + if (result?['success']) { + eventChannel.receiveBroadcastStream().listen(_onData, + onError: (response) { + print(response); + }); + } + } + + void _onData(response) { + if (response is Map) { + var action = (response as Map)["action"]; + if (action == 'otherLogin' || action == 'handleCustomLabel') { + quickLoginPlugin.closeLoginAuthView(); + } else if (action == 'authViewDidDisappear') { + isLogining = false; + } + } + } + + /// 预取号 + void preLogin() async { + if (!check) { + showOKToast('请勾选同意用户协议和隐私协议'); + FocusManager.instance.primaryFocus?.unfocus(); + return; + } + if (isWaitPre) return; + isWaitPre = true; + Map? map = await quickLoginPlugin.preFetchNumber(); + isWaitPre = false; + String ydToken = ''; + if (map?['success'] == true) { + ydToken = map?['token']; + quickLogin(ydToken); + } else { + if (map?['code'] == -1) { + isInitSuccess(); + showOKToast('当前使用用户过多,请重试'); + } else { + showOKToast('当前使用用户过多,请重试'); + } + } + } + + void quickLogin(String token) async { + var configMap; + String file = ""; + if (Platform.isIOS) { + file = "data/ios-light-config.json"; + } else if (Platform.isAndroid) { + file = "data/android-light-config.json"; + } + if (isLogining) return; + isLogining = true; + var result = await rootBundle.loadString(file); + configMap = {"uiConfig": json.decode(result)}; + quickLoginPlugin.setUiConfig(configMap); + Map? map = await quickLoginPlugin.onePassLogin(); + if (map?["success"]) { + var accessToken = map?["accessToken"]; + quickLoginPlugin.closeLoginAuthView(); + + SmartDialog.showLoading(msg: '正在登录中...'); + Map params = { + 'operatorAccessToken': accessToken, + 'ydToken': token + }; + if (clipboardStr.isNotEmpty) { + params['inviteCode'] = clipboardStr; + } + var data = + await DioManager.instance.post(url: Api.quickLogin, params: params); + + var bean = BaseResponse.fromJson( + data, (data) => LoginData.fromJson(data)); + if (bean.code == 200) { + SharedPreferencesHelper.getInstance().then((sharedPreferences) { + sharedPreferences.setString( + SharedPreferencesHelper.LOGINPHONE, phoneEditingController.text); + sharedPreferences.setString(SharedPreferencesHelper.AUTHORIZATION, + bean.data!.Authorization.toString()); + }); + + var data = await DioManager.instance.get(url: Api.getUserMine); + isLogining = false; + SmartDialog.dismiss(); + if (data['code'] == 200) { + var bean = BaseResponse.fromJson( + data, (data) => MineResponseBean.fromJson(data)); + if (bean.isSuccess()) { + if (!bean.data.has_pwd) { + Get.toNamed(Routes.SetPasswordPage); + return; + } + } + } + + Get.offNamed(Routes.Home); + return; + } else if (bean.code == 30002) { + isLogining = false; + SmartDialog.dismiss(); + SharedPreferencesHelper.getInstance().then((sharedPreferences) { + sharedPreferences.setString( + SharedPreferencesHelper.LOGINPHONE, phoneEditingController.text); + sharedPreferences.setString(SharedPreferencesHelper.AUTHORIZATION, + bean.data!.Authorization.toString()); + }); + + Get.offNamed(Routes.Complete_materialPage); + return; + } else { + isLogining = false; + SmartDialog.dismiss(); + showOKToast(bean.msg.toString()); + } + } else { + isLogining = false; + SmartDialog.dismiss(); + showOKToast(map?['msg'] ?? ''); + } + } + Future getCode() async { SmartDialog.showLoading(msg: '正在发送中'); var data = await DioManager.instance.post( @@ -178,6 +306,7 @@ class LoginLogic extends GetxController { t?.cancel(); //清除 sendCodeBtn = false; seconds = 60; + // showOKToast('若验证码未收到请打开数据网络使用[一键登录]'); } update(); }); @@ -232,7 +361,8 @@ class LoginLogic extends GetxController { }; } - var data = await DioManager.instance.post(url: loginType == 0 ? Api.login : Api.new_login, params: params); + var data = await DioManager.instance + .post(url: loginType == 0 ? Api.login : Api.new_login, params: params); isLogining = false; SmartDialog.dismiss(); var bean = BaseResponse.fromJson( @@ -265,7 +395,7 @@ class LoginLogic extends GetxController { }); } var data = - await DioManager.instance.put(url: Api.refreshToken, params: {}); + await DioManager.instance.put(url: Api.refreshToken, params: {}); var bean = BaseResponse.fromJson( data, (data) => LoginData.fromJson(data)); if (bean.code == 200) { @@ -286,7 +416,6 @@ class LoginLogic extends GetxController { } } - Get.offNamed(Routes.Home); return; } else if (bean.code == 30002) { @@ -322,7 +451,7 @@ class LoginLogic extends GetxController { // Get.toNamed(AppRoutes.Complete_materialPage); // return; // } - // showToast(msg); + // showOKToast(msg); // } catch (e) { // if (e is DioException) { // print('DioException: ${e.message}'); @@ -335,7 +464,7 @@ class LoginLogic extends GetxController { // Get.toNamed(AppRoutes.Complete_materialPage); // if (!GetUtils.isPhoneNumber(phoneEditingController.text)) { - // showToast('请输入正确的手机号'); + // showOKToast('请输入正确的手机号'); // } } } diff --git a/circle_app/lib/circle_app/login/login/view.dart b/circle_app/lib/circle_app/login/login/view.dart index 4765712..c46462a 100644 --- a/circle_app/lib/circle_app/login/login/view.dart +++ b/circle_app/lib/circle_app/login/login/view.dart @@ -43,7 +43,7 @@ class LoginPage extends StatelessWidget { Positioned( left: 0, right: 0, - top: 180.sp, + top: 120.sp, child: Image.asset( getBaseImage("ic_launcher"), width: 120.sp, @@ -53,11 +53,11 @@ class LoginPage extends StatelessWidget { width: Get.width, height: Get.height, child: Column( - mainAxisAlignment: MainAxisAlignment.center, + // mainAxisAlignment: MainAxisAlignment.center, children: [ Container( - // margin: EdgeInsets.only( - // top: MediaQuery.of(context).padding.top + 100.sp), + margin: EdgeInsets.only( + top:270.sp), child: Stack( alignment: Alignment.center, children: [ @@ -355,32 +355,75 @@ class LoginPage extends StatelessWidget { ), ), Positioned( - bottom: 182.sp, - child: GestureDetector( - onTap: () { - logic.login(); - }, - child: Container( - width: 200.sp, - height: 50.sp, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(25.sp), - gradient: const LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, - colors: [ - Color(0xff0AFCFF), - Color(0xffD739EA) - ])), - child: Text( - '登录', - style: TextStyle( - color: Colors.white, - fontSize: 16.sp, - fontWeight: FontWeight.w500), + top: 470.sp, + child: Column( + children: [ + Container( + width: 280.sp, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + GestureDetector( + onTap: () { + logic.login(); + }, + child: Container( + width: 120.sp, + height: 50.sp, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25.sp), + gradient: const LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + Color(0xff0AFCFF), + Color(0xffD739EA) + ])), + child: Text( + logic.loginType == 0 ? '验证码登录' : '密码登录', + style: TextStyle( + color: Colors.white, + fontSize: 16.sp, + fontWeight: FontWeight.w500), + ), + ), + ), + GestureDetector( + onTap: () { + logic.preLogin(); + + }, + child: Container( + width: 120.sp, + height: 50.sp, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25.sp), + gradient: const LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + Color(0xff0AFCFF), + Color(0xffD739EA) + ])), + child: Text( + '一键登录', + style: TextStyle( + color: Colors.white, + fontSize: 16.sp, + fontWeight: FontWeight.w500), + ), + ), + ), + ], + ), ), - ), + Container( + margin: EdgeInsets.only(top: 15.sp), + child: Text('若验证码未收到请打开数据网络使用[一键登录]',style: TextStyle(color: Colors.white,fontSize: 14.sp),), + ) + ], ), ), Positioned( diff --git a/circle_app/lib/circle_app/minefragment/logic.dart b/circle_app/lib/circle_app/minefragment/logic.dart index ffb8dbd..5ab61e6 100644 --- a/circle_app/lib/circle_app/minefragment/logic.dart +++ b/circle_app/lib/circle_app/minefragment/logic.dart @@ -1,4 +1,5 @@ +import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:fluwx/fluwx.dart'; @@ -56,7 +57,7 @@ class MinefragmentLogic extends GetxController { bool has_pwd = false; bool isAuth = false; - + bool isUpdate = false; bool isUpdateVersion = false; String enterHomeInfoMsg = "进入主页"; String joinedCircle = ""; @@ -80,6 +81,10 @@ class MinefragmentLogic extends GetxController { bool isShowserveTip = false; + UpdateInfo? versionInfo; + + var version = ''; + @override void onReady() { // TODO: implement onReady @@ -204,16 +209,6 @@ class MinefragmentLogic extends GetxController { } } - Future checkVersion() async { - var data = await DioManager.instance.get(url: Api.CHECK_VERSION); - var bean = BaseResponse.fromJson( - data, (data) => UpdateInfo.fromJson(data)); - if (bean.isSuccess()) { - isUpdateVersion = bean.data.update == 1; - update(); - } - } - getVisitorMsgData() async { var data = await DioManager.instance.get(url: Api.getVisitorMsgs,); @@ -351,6 +346,35 @@ class MinefragmentLogic extends GetxController { } } + + Future checkVersion() async { + var data = await DioManager.instance.get(url: Api.CHECK_VERSION); + var bean = BaseResponse.fromJson( + data, (data) => UpdateInfo.fromJson(data)); + if (bean.isSuccess() && bean.data.update == 1) { + if ( bean.data.update == 1) { + isUpdate = true; + version = bean.data.version; + versionInfo = bean.data; + update(); + } + // showReportDialog(Get.context!, bean.data.constraint == 0, bean.data!); + } + } + + void showReportDialog( + BuildContext context, bool isDismiss, UpdateInfo updateInfo) { + showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return UpdateDialog( + isDismiss: isDismiss, + updateInfo: updateInfo, + ); + }); + } + Future getImageFile() async { checkPhotosStatus(); await fetchQnToken(Api.getqiniuToken); diff --git a/circle_app/lib/circle_app/minefragment/mine_func_item.dart b/circle_app/lib/circle_app/minefragment/mine_func_item.dart index 035f5c3..290f83c 100644 --- a/circle_app/lib/circle_app/minefragment/mine_func_item.dart +++ b/circle_app/lib/circle_app/minefragment/mine_func_item.dart @@ -63,6 +63,7 @@ class _MineFuncItemState extends State { _wxItemView(), _authtemView(), _helpItemView(), + _versionView(), _setUpItemView() ] ) @@ -81,7 +82,7 @@ class _MineFuncItemState extends State { Get.toNamed(Routes.MyCirclePage, arguments: ''); }, child: Container( - margin: EdgeInsets.only(top: 30.sp), + margin: EdgeInsets.only(top: 25.sp), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -126,7 +127,7 @@ class _MineFuncItemState extends State { Get.toNamed(Routes.InvitePage); }, child: Container( - margin: EdgeInsets.only(top: 30.sp), + margin: EdgeInsets.only(top: 25.sp), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -209,7 +210,7 @@ class _MineFuncItemState extends State { // } }, child: Container( - margin: EdgeInsets.only(top: 30.sp), + margin: EdgeInsets.only(top: 25.sp), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -291,7 +292,7 @@ class _MineFuncItemState extends State { // controller.state.hearUrl }, child: Container( - margin: EdgeInsets.only(top: 30.sp), + margin: EdgeInsets.only(top: 25.sp), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -363,7 +364,7 @@ class _MineFuncItemState extends State { Get.toNamed(Routes.Real_people_auth); }, child: Container( - margin: EdgeInsets.only(top: 30.sp), + margin: EdgeInsets.only(top: 25.sp), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -428,14 +429,121 @@ class _MineFuncItemState extends State { ); } + Widget _versionView() { + return GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + if (logic.isUpdate) { + logic.showReportDialog(context, logic.versionInfo!.constraint == 0 , logic.versionInfo!); + } else { + showOKToast('当前已经是最新版本'); + } + }, + child: Container( + margin: EdgeInsets.only(top: 25.sp), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ClipOval( + child: Image( + image: AssetImage(getMineImage("version_icon")), + width: 38.sp, + height:38.sp, + ), + ), + Container( + margin: EdgeInsets.only(left: 4.sp), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + '更新版本', + style: TextStyle(color: Colors.white,fontSize: 14.sp), + ), + logic.isUpdate + ? Row( + children: [ + Container( + width: 6.sp, + height: 5.sp, + margin: + EdgeInsets.only(left: 4.sp, right: 4.sp), + decoration: BoxDecoration( + color: Colors.red, + borderRadius: BorderRadius.circular(3.sp), + ), + ), + Text( + logic.version ?? '', + style: TextStyle( + color: const Color(0xFFB7BECC), + fontSize: 12.sp, + ), + ), + SizedBox(width: 8.sp), + ], + ) + : Container(), + ], + ), + SizedBox(width: 4.sp), + Text( + logic.isUpdate ? '又有一些惊喜等你体验' : "更多惊喜体验在路上", + style: TextStyle(color: Colors.white60,fontSize: 12.sp), + ), + ], + ), + ), + Spacer(), + Image( + image: AssetImage(getHomeImage("icon_in")), + width: 24.sp, + height: 24.sp, + ) + // Row( + // children: [ + // Image( + // image: AssetImage(getMineImage("wallet")), + // width: 24.sp, + // height: 24.sp, + // ), + // SizedBox(width: 10.sp), + // const Text( + // "关注官方公众号", + // style: TextStyle(color: Colors.white), + // ), + // ], + // ), + // Row( + // children: [ + // Text( + // '获取最新资讯及福利', + // style: const TextStyle(color: Colors.white60), + // ), + // Image( + // image: AssetImage(getHomeImage("icon_in")), + // width: 24.sp, + // height: 24.sp, + // ), + // ], + // ) + ], + ), + ), + ); + } + Widget _wxItemView() { return GestureDetector( behavior: HitTestBehavior.opaque, onTap: () { + // Get.toNamed(Routes.SetPasswordPage); openWeChatToSearch(); }, child: Container( - margin: EdgeInsets.only(top: 30.sp), + margin: EdgeInsets.only(top: 25.sp), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -509,7 +617,7 @@ class _MineFuncItemState extends State { // controller.state.hearUrl }, child: Container( - margin: EdgeInsets.only(top: 30.sp), + margin: EdgeInsets.only(top: 25.sp), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -583,7 +691,7 @@ class _MineFuncItemState extends State { }, child: Container( // color: Colors.red, - margin: EdgeInsets.only(top: 30.sp), + margin: EdgeInsets.only(top: 25.sp), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ diff --git a/circle_app/lib/circle_app/minefragment/view.dart b/circle_app/lib/circle_app/minefragment/view.dart index e435a93..6c224f0 100644 --- a/circle_app/lib/circle_app/minefragment/view.dart +++ b/circle_app/lib/circle_app/minefragment/view.dart @@ -1916,7 +1916,7 @@ class _MinefragmentPageState extends State ), Row( children: [ - mineLogic.isUpdateVersion + mineLogic.isUpdate ? Container( width: 10.sp, height: 10.sp, @@ -1925,7 +1925,7 @@ class _MinefragmentPageState extends State color: Colors.red, shape: BoxShape.circle), ) : Container(), - if (mineLogic.isUpdateVersion) + if (mineLogic.isUpdate) Text( '有新版本啦', style: TextStyle(color: Colors.white60), diff --git a/circle_app/lib/circle_app/setpassword/view.dart b/circle_app/lib/circle_app/setpassword/view.dart index 4d36d82..c47ec62 100644 --- a/circle_app/lib/circle_app/setpassword/view.dart +++ b/circle_app/lib/circle_app/setpassword/view.dart @@ -76,12 +76,12 @@ class SetpasswordPage extends StatelessWidget { ), Container( - margin: EdgeInsets.symmetric(horizontal: 73.sp), + // margin: EdgeInsets.symmetric(horizontal: 73.sp), child: Text( - '可输入字母或数字做密码', + '可输入字母或数字做密码,设置密码之后更方便登录哦~', style: TextStyle( color: const Color(0xFFB7BECC), - fontSize: 14.sp, + fontSize: 12.sp, ), ), ), diff --git a/circle_app/lib/circle_app/userinfo/logic.dart b/circle_app/lib/circle_app/userinfo/logic.dart index aa2334d..69ebb45 100644 --- a/circle_app/lib/circle_app/userinfo/logic.dart +++ b/circle_app/lib/circle_app/userinfo/logic.dart @@ -65,6 +65,7 @@ class UserinfoLogic extends GetxController { Map toUser = {}; + int pageType = 0; int pageIndex = 0; diff --git a/circle_app/lib/circle_app/userinfo/view.dart b/circle_app/lib/circle_app/userinfo/view.dart index 0203cc0..47b2f81 100644 --- a/circle_app/lib/circle_app/userinfo/view.dart +++ b/circle_app/lib/circle_app/userinfo/view.dart @@ -800,6 +800,18 @@ class MyTabbedScreenState extends State getMineImage('gift_shop'), width: 65.sp, ), + if (logic.giftList.length - + logic.recevigiftList.length > + 0) + Container( + margin: EdgeInsets.only(left: 4.sp, top: 5.sp), + + child: Text( + '👉${logic.giftList.length - logic.recevigiftList.length}个未点亮', + style: TextStyle( + color: AppColor.mainColor, fontSize: 14.sp), + ), + ), Expanded(child: Container()), Text( logic.toUser.isNotEmpty ? '贡献之星' : '贡献之星还在路上', diff --git a/circle_app/lib/net/api.dart b/circle_app/lib/net/api.dart index 8dd8d7f..560428d 100644 --- a/circle_app/lib/net/api.dart +++ b/circle_app/lib/net/api.dart @@ -711,5 +711,8 @@ class Api { //emoji配置 static var emojiConfig = '/up-service/callout/interact/emoji/configs'; + //快速登录 + static var quickLogin = '/user-service/login/quick'; + } diff --git a/circle_app/lib/view/notice.dart b/circle_app/lib/view/notice.dart index 34922d6..30ba217 100644 --- a/circle_app/lib/view/notice.dart +++ b/circle_app/lib/view/notice.dart @@ -27,6 +27,7 @@ typedef void NoticeCallback(); void showFloatingButtonOverlay(BuildContext context, String nickname, String ageMsg, String avatar, int event, NoticeCallback noticeCallback) { + if (Get.currentRoute == Routes.Chat) return; OverlayState? overlayState = Overlay.of(context); late OverlayEntry overlayEntry; bool showMessage = false; diff --git a/circle_app/pubspec.lock b/circle_app/pubspec.lock index e2327a7..f4f1f19 100644 --- a/circle_app/pubspec.lock +++ b/circle_app/pubspec.lock @@ -1493,6 +1493,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "4.1.0" + quickpass_yidun_flutter: + dependency: "direct main" + description: + name: quickpass_yidun_flutter + sha256: f04f7bb1dd82d116e6e837c7c9d501af11cc4ce116998b4f739a50a5d718b108 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.5.6" quiver: dependency: transitive description: diff --git a/circle_app/pubspec.yaml b/circle_app/pubspec.yaml index 9414514..18fff52 100644 --- a/circle_app/pubspec.yaml +++ b/circle_app/pubspec.yaml @@ -127,6 +127,8 @@ dependencies: carousel_slider: ^4.0.0 #友盟 umeng_common_sdk: ^1.2.7 + #易盾一键认证 + quickpass_yidun_flutter: ^1.4.3 dev_dependencies: flutter_test: @@ -161,4 +163,6 @@ flutter: - data/img/mine/ - data/img/msg/ - data/img/circle/ - - data/china.json \ No newline at end of file + - data/china.json + - data/android-light-config.json + - data/ios-light-config.json \ No newline at end of file