Browse Source

[new]一键登录Android端增加页面自定义

zk 2 months ago
parent
commit
e85e01dd6c

BIN
android/app/src/main/res/drawable/bg_header.webp


+ 16 - 0
android/app/src/main/res/drawable/bg_quick_login_activity.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners
+        android:bottomLeftRadius="20dp"
+        android:bottomRightRadius="100dp"
+        android:topLeftRadius="70dp"
+        android:topRightRadius="100dp" />
+    <gradient
+        android:endColor="#F4D898"
+        android:startColor="#FFF6E2" />
+    <padding
+        android:bottom="3dp"
+        android:left="8dp"
+        android:right="8dp"
+        android:top="3dp" />
+</shape>

+ 34 - 17
assets/config/android_quick_login_config.json

@@ -2,7 +2,8 @@
   "statusBarColor": "#ffffff",
   "isStatusBarDarkColor": true,
   "navBackIconMargin": 15,
-  "isHideNav": false,
+  "isHideNav": true,
+  "navHeight": 0,
   "navTitle": " ",
   "isHideBackIcon": false,
   "navBackIconWidth": 30,
@@ -13,18 +14,7 @@
   "logoTopYOffset": 50,
   "logoBottomYOffset": 0,
   "logoXOffset": 0,
-  "isHideLogo": false,
-  "loginBtnText": "本机号码一键登录",
-  "loginBtnTextColor": "#ffffff",
-  "loginBtnTextSize": 16,
-  "loginBtnHeight": 50,
-  "loginBtnWidth": 450,
-  "loginBtnTopYOffset": 240,
-  "loginBtnBottomYOffset": 0,
-  "loginBtnXOffset": 0,
-  "loginBtnMarginLeft": 24,
-  "loginBtnMarginRight": 24,
-  "loginBtnBackgroundRes": "bg_login_btn",
+  "isHideLogo": true,
   "privacySize": 12,
   "privacyDpSize": 0,
   "privacyTopYOffset": 0,
@@ -64,19 +54,46 @@
   "isShowPrivacyDialog": true,
   "isPrivacyDialogAuto": true,
   "privacyDialogContentEnd": ",点击“同意”,表示您已经阅读并同意以上协议",
+  "maskNumberColor": "#E5000000",
+  "maskNumberSize": 30,
+  "isMaskNumberBold": true,
+  "maskNumberTopYOffset": 280,
+  "sloganTopYOffset": 318,
+  "sloganSize": 12,
+  "sloganColor": "#4D000000",
+  "loginBtnText": "本机号码一键登录",
+  "loginBtnTextColor": "#ffffff",
+  "loginBtnTextSize": 15,
+  "loginBtnHeight": 50,
+  "loginBtnWidth": 480,
+  "loginBtnTopYOffset": 364,
+  "loginBtnBottomYOffset": 0,
+  "loginBtnXOffset": 0,
+  "loginBtnMarginLeft": 40,
+  "loginBtnMarginRight": 40,
+  "loginBtnBackgroundRes": "bg_login_btn",
   "widgets": [
     {
       "width": 150,
-      "height": 30,
       "viewId": "code_login",
       "type": "TextView",
-      "top": 310,
-      "font": 15,
+      "top": 440,
+      "font": 12,
       "text": "验证码登录",
-      "textColor": "#202020",
+      "textColor": "#80000000",
       "isGravityCenter": true,
       "clickable": true,
       "action": "code_login"
+    },
+    {
+      "viewId": "member_activity",
+      "type": "TextView",
+      "top": 260,
+      "right": 40,
+      "font": 10,
+      "backgroundImgPath": "bg_quick_login_activity",
+      "text": "新用户仅需0.1元/天",
+      "textColor": "#8A5F03"
     }
   ]
 }

+ 3 - 0
lib/module/login/login_controller.dart

@@ -82,6 +82,9 @@ class LoginController extends BaseController {
           QuickLoginHelper.closeLoginAuthView();
           _loginStatus.value = LoginStatus.codeLogin;
           break;
+        case "back":
+          QuickLoginHelper.closeLoginAuthView();
+          break;
       }
     }
   }

+ 44 - 3
lib/sdk/quicklogin/quick_login_helper.dart

@@ -1,7 +1,10 @@
+import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
 
 import 'package:flutter/services.dart';
+import 'package:get/get.dart';
+import 'package:get/get_core/src/get_main.dart';
 import 'package:location/data/consts/build_config.dart';
 import 'package:location/data/consts/web_url.dart';
 import 'package:location/resource/assets.gen.dart';
@@ -53,9 +56,47 @@ class QuickLoginHelper {
     } else if (Platform.isAndroid) {
       file = Assets.config.androidQuickLoginConfig;
     }
-    return rootBundle.loadString(file).then((value) {
-      return {"uiConfig": json.decode(value)};
-    });
+    dynamic configMap = json.decode(await rootBundle.loadString(file));
+    //自定义配置
+    if (Platform.isAndroid) {
+      configMap = getAndroidCustomConfigSetting(configMap);
+    } else if (Platform.isIOS) {
+      //TODO ios需参考UI完善自定义配置
+    }
+    return {"uiConfig": configMap};
+  }
+
+  static dynamic getAndroidCustomConfigSetting(dynamic configMap) {
+    final List<dynamic> rawWidgets = configMap['widgets'] ?? [];
+    final List<Map<String, dynamic>> widgetsMap =
+        rawWidgets.map((e) => Map<String, dynamic>.from(e)).toList();
+
+    //背景图
+    final Map<String, dynamic> bgHeaderMap = {};
+    bgHeaderMap['viewId'] = 'bg_header';
+    bgHeaderMap['type'] = 'ImageView';
+    bgHeaderMap['isGravityCenter'] = true;
+    bgHeaderMap['top'] = 0;
+    bgHeaderMap['backgroundImgPath'] = "bg_header";
+    bgHeaderMap['width'] = Get.width.toInt();
+    int height = (Get.width * (648 / 1083)).toInt();
+    bgHeaderMap['height'] = height;
+    widgetsMap.add(bgHeaderMap);
+    //自定义返回按钮
+    final Map<String, dynamic> backMap = {};
+    backMap['viewId'] = 'ic_back';
+    backMap['type'] = 'ImageView';
+    backMap['isGravityCenter'] = true;
+    backMap['top'] = 16;
+    backMap['left'] = 20;
+    backMap['backgroundImgPath'] = "icon_common_back";
+    backMap['width'] = 24;
+    backMap['height'] = 24;
+    backMap['action'] = 'back';
+    widgetsMap.add(backMap);
+
+    configMap['widgets'] = widgetsMap;
+    return configMap;
   }
 
   // 在初始化方法中添加测试代码(如 initState 或单独的测试按钮