2.5.2代码提交
@ -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",
|
||||
|
||||
26
circle_app/android/app/proguard-rules.pro
vendored
@ -35,3 +35,29 @@
|
||||
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 <methods>;
|
||||
public <fields>;
|
||||
}
|
||||
-keep class com.netease.nis.quicklogin.helper.UnifyUiConfig{*;}
|
||||
-keep class com.netease.nis.quicklogin.helper.UnifyUiConfig$Builder{
|
||||
public <methods>;
|
||||
public <fields>;
|
||||
}
|
||||
-keep class com.netease.nis.quicklogin.utils.LoginUiHelper$CustomViewListener{
|
||||
public <methods>;
|
||||
public <fields>;
|
||||
}
|
||||
-keep class com.netease.nis.basesdk.**{
|
||||
public *;
|
||||
protected *;
|
||||
}
|
||||
BIN
circle_app/android/app/src/main/res/drawable/check.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
circle_app/android/app/src/main/res/drawable/left_bt_bg.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
circle_app/android/app/src/main/res/drawable/login_btn_bg.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
circle_app/android/app/src/main/res/drawable/login_logo.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
circle_app/android/app/src/main/res/drawable/right_bt_bg.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
109
circle_app/data/android-light-config.json
Normal file
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
circle_app/data/img/mine/version_icon.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
201
circle_app/data/ios-light-config.json
Normal file
@ -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}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
21
circle_app/ios/Runner/Assets.xcassets/check_image.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
BIN
circle_app/ios/Runner/Assets.xcassets/check_image.imageset/umcsdk_check_image.png
vendored
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
21
circle_app/ios/Runner/Assets.xcassets/checkedImageName.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
BIN
circle_app/ios/Runner/Assets.xcassets/checkedImageName.imageset/checkedImageName.png
vendored
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
21
circle_app/ios/Runner/Assets.xcassets/login_btn_normal.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
BIN
circle_app/ios/Runner/Assets.xcassets/login_btn_normal.imageset/umcsdk_login_btn_normal.png
vendored
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
21
circle_app/ios/Runner/Assets.xcassets/login_btn_press.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
BIN
circle_app/ios/Runner/Assets.xcassets/login_btn_press.imageset/umcsdk_login_btn_press.png
vendored
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
21
circle_app/ios/Runner/Assets.xcassets/login_btn_unable.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
BIN
circle_app/ios/Runner/Assets.xcassets/login_btn_unable.imageset/umcsdk_login_btn_unable.png
vendored
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
21
circle_app/ios/Runner/Assets.xcassets/return_bg.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
BIN
circle_app/ios/Runner/Assets.xcassets/return_bg.imageset/umcsdk_return_bg.png
vendored
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
21
circle_app/ios/Runner/Assets.xcassets/unCheckedImageName.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
BIN
circle_app/ios/Runner/Assets.xcassets/unCheckedImageName.imageset/unCheckedImageName.png
vendored
Normal file
|
After Width: | Height: | Size: 321 B |
21
circle_app/ios/Runner/Assets.xcassets/uncheck_image.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
BIN
circle_app/ios/Runner/Assets.xcassets/uncheck_image.imageset/umcsdk_uncheck_image.png
vendored
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
@ -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(
|
||||
|
||||
@ -170,17 +170,18 @@ class _CustomDialogState extends State<UpdateDialog> {
|
||||
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<UpdateDialog> {
|
||||
if (appStoreUrl.contains("apk")) {
|
||||
updataApk(appStoreUrl);
|
||||
setDownloadUi();
|
||||
Future.delayed(Duration(seconds: 10),() {
|
||||
setState(() {
|
||||
isShowWeb = true;
|
||||
});
|
||||
isShowWeb = true;
|
||||
setState(() {
|
||||
|
||||
});
|
||||
} else {
|
||||
if (await canLaunch(appStoreUrl)) {
|
||||
|
||||
@ -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,
|
||||
);
|
||||
|
||||
@ -81,6 +81,7 @@ class _HomePageState extends State<HomePage>
|
||||
});
|
||||
|
||||
vipNotifySub = EventBusManager.on<CallOutVipTipClass>().listen((event) {
|
||||
if (Get.currentRoute == Routes.Chat) return;
|
||||
showFloatingCallOutVipOverlay(event.info);
|
||||
});
|
||||
|
||||
|
||||
@ -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<String> findFastestDomain(List domains) async {
|
||||
final responseTimes = <String, int>{};
|
||||
|
||||
@ -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<dynamic, dynamic>? 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<dynamic, dynamic>? map = await quickLoginPlugin.onePassLogin();
|
||||
if (map?["success"]) {
|
||||
var accessToken = map?["accessToken"];
|
||||
quickLoginPlugin.closeLoginAuthView();
|
||||
|
||||
SmartDialog.showLoading(msg: '正在登录中...');
|
||||
Map<String, dynamic> 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<LoginData>.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<MineResponseBean>.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<void> 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<LoginData>.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<LoginData>.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('请输入正确的手机号');
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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<void> checkVersion() async {
|
||||
var data = await DioManager.instance.get(url: Api.CHECK_VERSION);
|
||||
var bean = BaseResponse<UpdateInfo>.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<void> checkVersion() async {
|
||||
var data = await DioManager.instance.get(url: Api.CHECK_VERSION);
|
||||
var bean = BaseResponse<UpdateInfo>.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);
|
||||
|
||||
@ -63,6 +63,7 @@ class _MineFuncItemState extends State<MineFuncItem> {
|
||||
_wxItemView(),
|
||||
_authtemView(),
|
||||
_helpItemView(),
|
||||
_versionView(),
|
||||
_setUpItemView()
|
||||
]
|
||||
)
|
||||
@ -81,7 +82,7 @@ class _MineFuncItemState extends State<MineFuncItem> {
|
||||
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<MineFuncItem> {
|
||||
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<MineFuncItem> {
|
||||
// }
|
||||
},
|
||||
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<MineFuncItem> {
|
||||
// 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<MineFuncItem> {
|
||||
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<MineFuncItem> {
|
||||
);
|
||||
}
|
||||
|
||||
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<MineFuncItem> {
|
||||
// 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<MineFuncItem> {
|
||||
},
|
||||
child: Container(
|
||||
// color: Colors.red,
|
||||
margin: EdgeInsets.only(top: 30.sp),
|
||||
margin: EdgeInsets.only(top: 25.sp),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
|
||||
@ -1916,7 +1916,7 @@ class _MinefragmentPageState extends State<MinefragmentPage>
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
mineLogic.isUpdateVersion
|
||||
mineLogic.isUpdate
|
||||
? Container(
|
||||
width: 10.sp,
|
||||
height: 10.sp,
|
||||
@ -1925,7 +1925,7 @@ class _MinefragmentPageState extends State<MinefragmentPage>
|
||||
color: Colors.red, shape: BoxShape.circle),
|
||||
)
|
||||
: Container(),
|
||||
if (mineLogic.isUpdateVersion)
|
||||
if (mineLogic.isUpdate)
|
||||
Text(
|
||||
'有新版本啦',
|
||||
style: TextStyle(color: Colors.white60),
|
||||
|
||||
@ -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,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@ -65,6 +65,7 @@ class UserinfoLogic extends GetxController {
|
||||
|
||||
Map toUser = {};
|
||||
|
||||
|
||||
int pageType = 0;
|
||||
|
||||
int pageIndex = 0;
|
||||
|
||||
@ -800,6 +800,18 @@ class MyTabbedScreenState extends State<UserinfoPage>
|
||||
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 ? '贡献之星' : '贡献之星还在路上',
|
||||
|
||||
@ -711,5 +711,8 @@ class Api {
|
||||
//emoji配置
|
||||
static var emojiConfig = '/up-service/callout/interact/emoji/configs';
|
||||
|
||||
//快速登录
|
||||
static var quickLogin = '/user-service/login/quick';
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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:
|
||||
@ -162,3 +164,5 @@ flutter:
|
||||
- data/img/msg/
|
||||
- data/img/circle/
|
||||
- data/china.json
|
||||
- data/android-light-config.json
|
||||
- data/ios-light-config.json
|
||||