鸿蒙开发(三):使用ArkTS开发鸿蒙应用:登录页面的实现

🌟 使用ArkTS开发鸿蒙应用:登录页面的实现

在开发鸿蒙应用时,登录页面是一个常见的功能模块。通过登录页面,用户可以验证自己的身份并进入应用的主界面。以下是一个完整的登录页面实现,包括用户输入账号和密码、调用后端接口验证登录信息,并使用本地存储保存登录状态。

代码解析

1. 导入模块

import { router } from '@kit.ArkUI';
import { httpRequestGet } from '../Utils/HttpUtils';
import { LoginModel, LoginModelUser } from '../model/LoginModel';
import promptAction from '@ohos.promptAction';
import { common } from '@kit.AbilityKit';
import { preferences } from '@kit.ArkData';
 

 

  • 导入了多个模块,用于实现路由跳转、HTTP请求、提示框、本地存储等功能。
2. 数据持久化

let dataPreference: preferences.Preferences | null = null;

  • 定义了一个全局变量 dataPreference,用于存储用户登录信息。

 3. 定义登录页面组件

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  @State username: string = "";
  @State password: string = "";
  private backtime: number = 0;
  private loginurl: string = "http://42.192.45.45:8080/boss/user/validlogin?";
 

  • 定义了一个名为 Index 的登录页面组件。
  • 使用 @State 装饰器定义了 username 和 password,用于存储用户输入的账号和密码。
  • 定义了 loginurl,用于存储登录接口的URL。
4. 登录逻辑

async toLogin() {
  let username = 'username=';
  let password = '&password=';
  let networkurl = this.loginurl + username + this.username + password + this.password;
  console.log("networkurl===>" + networkurl);

  await httpRequestGet(networkurl).then((data) => {
    console.log("登录返回数据:" + data.toString());
    let loginModel: LoginModel = JSON.parse(data.toString());
    let msg = loginModel.msg;

    let options: preferences.Options = { name: 'myStore' };
    dataPreference = preferences.getPreferencesSync(getContext(), options);

    if (loginModel.code == 200) {
      router.pushUrl({
        url: "pages/Home"
      });

      dataPreference.putSync("username", this.username);
      dataPreference.putSync("password", this.password);
      dataPreference.flush();
    } else {
      promptAction.showToast({
        message: msg
      });
    }
  });
}

 

  • 定义了 toLogin 方法,用于处理用户登录逻辑。
  • 拼接登录接口的URL,包含用户输入的账号和密码。
  • 使用 httpRequestGet 发送GET请求到后端接口。
  • 如果登录成功(返回码为200),将用户重定向到主页,并将用户名和密码保存到本地存储中。
  • 如果登录失败,显示提示信息。
5. 页面布局 

build() {
  Column() {
    Image($r('app.media.icon2'))
      .width(100)
      .height(100)
      .borderRadius(10)
      .margin({ top: 140 })
    Text("登录界面")
      .fontSize(24)
      .fontWeight(700)
      .margin({ top: 10 })
    Text("登录账号以使用更多服务")
      .fontColor("#ff807b7b")
      .margin({ top: 10 })
    TextInput({ placeholder: "请输入账号" })
      .type(InputType.Normal)
      .onChange((value) => {
        this.username = value;
      })
      .newLocalFancy()
    TextInput({ placeholder: "请输入密码" })
      .type(InputType.Password)
      .onChange((value) => {
        this.password = value;
      })
      .newLocalFancy()
    Row({ space: 10 }) {
      Button("登录").width("80%").height(40)
        .onClick(() => {
          this.toLogin();
          console.log("账号:" + this.username);
          console.log("密码:" + this.password);
        }).layoutWeight(1)
      Button("注册").width("80%").height(40)
        .onClick(() => {
          router.pushUrl({
            url: "pages/Register"
          });
        }).layoutWeight(1)
    }.margin({ top: 20, right: 20, left: 20 })
  }
  .height('100%')
  .width('100%')
}

 

  • 使用 Column 和 Row 布局组件,构建登录页面的UI。
  • 包含一个图片、两个文本提示、两个输入框(账号和密码)以及两个按钮(登录和注册)。
  • 通过 onChange 事件监听输入框的值变化,更新 username 和 password
  • 登录按钮点击时调用 toLogin 方法,注册按钮点击时跳转到注册页面。
6. 样式定义

@Styles
newLocalFancy() {
  .margin({ top: 20, left: 20, right: 20 })
}
 

  • 定义了一个样式方法 newLocalFancy,用于设置输入框的外边距。
7. 返回键处理

 onBackPress(): boolean | void {
  let nowtime = Date.now();
  if (nowtime - this.backtime < 1000) {
    const mContext = getContext(this) as common.UIAbilityContext;
    mContext.terminateSelf();
  } else {
    this.backtime = nowtime;
    promptAction.showToast({
      message: "再按一次退出应用"
    });
  }
  return true;
}

  • 定义了 onBackPress 方法,用于处理返回键事件。
  • 如果用户在1秒内连续点击返回键两次,则退出应用;否则显示提示信息。
8.LoginModel

 export class LoginModel {
  msg?: string = "";
  code?: number = 0;
  user?: LoginModelUser = new LoginModelUser();
  token?: string = "";
}
export class LoginModelUser {
  id?: number = 0;
  username?: string = "";
  password?: string = "";
  phone?: string = "";
  sex?: string = "";
}

9.图片展示 

总结

通过上述代码,我们实现了一个完整的登录页面,包括用户输入账号和密码、调用后端接口验证登录信息,并使用本地存储保存登录状态。用户登录成功后将被重定向到主页,登录失败则显示提示信息。此外,还实现了返回键的防抖处理,提升了用户体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值