2.5.2代码提交

This commit is contained in:
CYH 2025-04-03 14:06:33 +08:00
parent e6ffa697bf
commit b543ec7943
45 changed files with 952 additions and 80 deletions

View File

@ -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",

View File

@ -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 <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 *;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View 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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View 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}
}
]
}

View File

@ -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

View File

@ -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;

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

View File

@ -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(

View File

@ -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)) {

View File

@ -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,
);

View File

@ -81,6 +81,7 @@ class _HomePageState extends State<HomePage>
});
vipNotifySub = EventBusManager.on<CallOutVipTipClass>().listen((event) {
if (Get.currentRoute == Routes.Chat) return;
showFloatingCallOutVipOverlay(event.info);
});

View File

@ -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('请输入正确的手机号');
// }
}
}

View File

@ -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(

View File

@ -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);

View File

@ -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: [

View File

@ -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),

View File

@ -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,
),
),
),

View File

@ -65,6 +65,7 @@ class UserinfoLogic extends GetxController {
Map toUser = {};
int pageType = 0;
int pageIndex = 0;

View File

@ -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 ? '贡献之星' : '贡献之星还在路上',

View File

@ -711,5 +711,8 @@ class Api {
//emoji配置
static var emojiConfig = '/up-service/callout/interact/emoji/configs';
//
static var quickLogin = '/user-service/login/quick';
}

View File

@ -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;

View File

@ -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:

View File

@ -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
- data/china.json
- data/android-light-config.json
- data/ios-light-config.json