温馨提示:本篇博客的详细代码已发布到 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组件的基础功能包括:
- 手机号输入框,支持输入过滤和长度限制
- 发送验证码按钮,支持基础交互
- 基础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)
代码讲解
- 外层布局容器
Column({ space: SPACE_TEN }) {// 内容
}
.width($r('app.string.modalwindow_size_full'))
.alignItems(HorizontalAlign.Start)
- 使用 Column 组件创建垂直布局
space: SPACE_TEN
设置子元素间垂直间距为10- 通过
width
设置宽度占满父容器 alignItems
设置子元素水平左对齐
- 标题行布局
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- 包含手机图标和标题文本两个子元素
- 设置宽度占满父容器
- 手机图标
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'))
- 使用资源引用显示"手机号登录"文本
- 设置文字大小
- 提示文本
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 手机号输入验证
手机号输入验证主要包括:
- 限制只能输入数字
- 限制最大长度为11位
- 实时验证输入长度,控制按钮状态
4.2 发送验证码基础逻辑
发送验证码的基础逻辑包括:
- 验证手机号是否有效
- 提供适当的交互反馈
- 基础按钮状态管理
5. 小结
本篇教程介绍了短信验证码登录的基础功能实现,包括:
- 基础UI布局
- 手机号输入验证
- 发送验证码按钮的基础功能
在下一篇教程中,我们将介绍更多进阶功能的实现。