48.HarmonyOS NEXT 登录模块开发教程(三)上:短信验证码登录基础实现

ops/2025/3/16 23:32:30/

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦!

HarmonyOS NEXT 登录模块开发教程(三)上:短信验证码登录基础实现

文章目录

  • HarmonyOS NEXT 登录模块开发教程(三)上:短信验证码登录基础实现
    • 效果预览
    • 1. 引言
    • 2. OtherWaysToLogin组件概述
      • 2.1 组件功能
      • 2.2 基础状态变量
    • 3. 基础UI实现
      • 3.1 顶部标题区域
        • 代码讲解
      • 3.2 手机号输入区域
      • 3.3 发送验证码按钮
    • 4. 基础交互逻辑
      • 4.1 手机号输入验证
      • 4.2 发送验证码基础逻辑
    • 5. 小结

效果预览

1. 引言

在前两篇教程中,我们介绍了HarmonyOS NEXT登录模块的整体架构、模态窗口的实现原理以及一键登录页面的实现。本篇教程将深入讲解短信验证码登录的基础功能实现,包括手机号输入、验证码发送等核心功能。

2. OtherWaysToLogin组件概述

2.1 组件功能

OtherWaysToLogin组件的基础功能包括:

  1. 手机号输入框,支持输入过滤和长度限制
  2. 发送验证码按钮,支持基础交互
  3. 基础UI布局实现

2.2 基础状态变量

@Component
export struct OtherWaysToLogin {// 发送验证码按钮的颜色@State buttonColor: ResourceColor = Color.Grey;// 发送验证码按钮的内容@State buttonContent: ResourceStr = $r('app.string.modalwindow_verify');// 手机号是否可用phoneNumberAvailable: boolean = false;
}

3. 基础UI实现

3.1 顶部标题区域

Column({ space: SPACE_TEN }) {Row({ space: SPACE_TEN }) {Image($r('app.media.phone')).width($r('app.integer.modalwindow_user_image_height')).borderRadius($r('app.integer.modalwindow_border_radius_mid'))Text($r('app.string.modalwindow_phone_login')).fontSize($r('app.integer.modalwindow_font_size_mid'))}.width($r('app.string.modalwindow_size_full'))Text($r('app.string.modalwindow_new')).width($r('app.string.modalwindow_size_full'))
}
.width($r('app.string.modalwindow_size_full'))
.alignItems(HorizontalAlign.Start)
代码讲解
  1. 外层布局容器
Column({ space: SPACE_TEN }) {// 内容
}
.width($r('app.string.modalwindow_size_full'))
.alignItems(HorizontalAlign.Start)
  • 使用 Column 组件创建垂直布局
  • space: SPACE_TEN 设置子元素间垂直间距为10
  • 通过 width 设置宽度占满父容器
  • alignItems 设置子元素水平左对齐
  1. 标题行布局
Row({ space: SPACE_TEN }) {Image($r('app.media.phone')).width($r('app.integer.modalwindow_user_image_height')).borderRadius($r('app.integer.modalwindow_border_radius_mid'))Text($r('app.string.modalwindow_phone_login')).fontSize($r('app.integer.modalwindow_font_size_mid'))
}
.width($r('app.string.modalwindow_size_full'))
  • 使用 Row 组件创建水平布局
  • space: SPACE_TEN 设置子元素间水平间距为10
  • 包含手机图标和标题文本两个子元素
  • 设置宽度占满父容器
  1. 手机图标
Image($r('app.media.phone')).width($r('app.integer.modalwindow_user_image_height')).borderRadius($r('app.integer.modalwindow_border_radius_mid'))
  • 使用资源引用加载手机图标
  • 设置图标宽度
  • 添加圆角效果
  1. 标题文本
Text($r('app.string.modalwindow_phone_login')).fontSize($r('app.integer.modalwindow_font_size_mid'))
  • 使用资源引用显示"手机号登录"文本
  • 设置文字大小
  1. 提示文本
Text($r('app.string.modalwindow_new')).width($r('app.string.modalwindow_size_full'))
  • 使用资源引用显示提示文本
  • 设置宽度占满父容器

3.2 手机号输入区域

Row() {Text($r('app.string.modalwindow_86'))Image($r('app.media.arrow_right')).size({width: $r('app.integer.modalwindow_arrow_right_height'),height: $r('app.integer.modalwindow_arrow_right_height')}).margin($r('app.integer.modalwindow_margin_default'))TextInput({ placeholder: $r('app.string.modalwindow_input_phone_number') }).inputFilter('[0-9]').backgroundColor(Color.Transparent).caretColor(Color.Grey).width($r('app.string.modalwindow_size_full')).maxLength(PHONE_NUMBER_LENGTH).onChange((value: string) => {if (value.length === PHONE_NUMBER_LENGTH) {this.phoneNumberAvailable = true;this.buttonColor = Color.Blue;} else {this.phoneNumberAvailable = false;this.buttonColor = Color.Grey;}})
}

3.3 发送验证码按钮

Button(this.buttonContent).type(ButtonType.Normal).border({ radius: $r('app.integer.modalwindow_border_radius') }).width($r('app.string.modalwindow_size_full')).backgroundColor(this.buttonColor).onClick(() => {if (!this.phoneNumberAvailable) {promptAction.showToast({ message: $r('app.string.modalwindow_message_right_phone_number') });return;}promptAction.showToast({ message: $r('app.string.modalwindow_message_verify_code_send') });})

4. 基础交互逻辑

4.1 手机号输入验证

手机号输入验证主要包括:

  1. 限制只能输入数字
  2. 限制最大长度为11位
  3. 实时验证输入长度,控制按钮状态

4.2 发送验证码基础逻辑

发送验证码的基础逻辑包括:

  1. 验证手机号是否有效
  2. 提供适当的交互反馈
  3. 基础按钮状态管理

5. 小结

本篇教程介绍了短信验证码登录的基础功能实现,包括:

  1. 基础UI布局
  2. 手机号输入验证
  3. 发送验证码按钮的基础功能

在下一篇教程中,我们将介绍更多进阶功能的实现。


http://www.ppmy.cn/ops/166345.html

相关文章

REDIS生产环境配置

REDIS生产环境配置 REDIS生产环境配置docker-compose文件redis.conf文件 REDIS生产环境配置 docker-compose模式部署生产环境 docker-compose文件 d_redis:image: redis:${REDIS_VERSION}container_name: d_redisvolumes:- ${REDIS_1_CONF_FILE}:/etc/redis.conf:ro- ${DATA_…

【每日学点HarmonyOS Next知识】上下拉动作、图片预览、组件边距、this获取、svg旋转

1、HarmonyOS 怎么实现上拉刷新,并可以调接口和实现动画,下拉刷新同理? 怎么实现上拉刷新,并可以调接口和实现动画,下拉刷新同理 参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-referenc…

Django REST Framework 中 ModelViewSet 的接口方法及参数详解,继承的方法和核心类方法,常用查询方法接口

第一部分(ModelViewSet) 一、ModelViewSet 的继承结构 ModelViewSet 继承自以下类: ModelViewSet (CreateModelMixin # 创建RetrieveModelMixin # 检索单个UpdateModelMixin # 更新DestroyModelMixin # 删除ListModelMixin …

【python】OpenCV—Hough Circle Transform

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数6、参考 更多有趣的代码示例,可参考【Programming】 1、功能描述 2、代码实现 载入必要的库 import sys import cv2 as cv import numpy as np函数入口 if __name__ "__main__&qu…

Ubuntu 服务器安装 Python 环境 的详细指南

以下是 在 Ubuntu 上安装 Python 3.10 的详细步骤(兼容 Ubuntu 20.04/22.04): 方法一:通过 PPA 仓库安装(推荐) 1. 添加 deadsnakes PPA sudo apt update sudo apt install software-properties-common s…

数据结构篇——线性表

一、引入 线性结构是数据结构中最为重要的一种数据存储结构之一,同时也是其他数据结构的基础。今天我们就来学学数据结构中的一种基础类型——线性表。 二、线性表的定义和特点 线性表的定义:用数据元素的有限序列表示。具体情况如下图所示:…

HarmonyOS学习第20天:让应用“找准方向”的地图与定位秘籍

引言:开启 HarmonyOS 应用的位置感知之旅 在这个信息爆炸的时代,我们的生活与地理位置信息紧密相连。无论是寻找一家心仪的餐厅,规划一次完美的旅行,还是追踪快递的实时位置,地图与定位服务都扮演着至关重要的角色。对…

idea maven 编译报错Java heap space解决方法

1.增加 Maven 编译的堆内存 我是用这个方法修改成功的 Maven 编译时使用的 JVM 堆内存可以通过设置 MAVEN_OPTS 环境变量来调整。 在 IntelliJ IDEA 中设置: 打开 IntelliJ IDEA 的设置(File -> Settings 或 Ctrl Alt S)。 导航到 Bui…