第30篇:用户信息管理——AccountUtil 与华为账号体系

img

一、引言

用户信息管理是应用的基础功能,包括用户登录、账号信息维护、个人资料展示等。DriverLicenseExam 项目通过 AccountUtil 工具类封装了华为账号体系和用户信息管理。本文将深入解析其实现。

二、账号数据模型

2.1 华为账号模型

// commons/commonLib/src/main/ets/utils/AccountUtil.ets
@ObservedV2
export class HuaweiAccountModel {
  @Trace public openID: string = '';
  @Trace public unionID: string = '';
  @Trace public authCode?: string = '';
  @Trace public idToken?: string = '';
  @Trace public authorizationCode?: string = '';
  @Trace public quickLoginAnonymousPhone?: string = '';
}

2.2 用户信息模型

@ObservedV2
export class UserInfoModel {
  @Trace public avatar: string | Resource = $r('app.media.user_avatar');
  @Trace public nickname: string | Resource = $r('app.string.user_name');
  @Trace public phone: string = '';
}

三、AccountUtil 工具类

3.1 状态管理

@ObservedV2
export class AccountUtil {
  private static _accountInfo: HuaweiAccountModel = AppStorageV2.connect(
    HuaweiAccountModel,
    AppStorageMap.HUAWEI_ACCOUNT,
    () => new HuaweiAccountModel(),
  )!;

  private static _userInfo: UserInfoModel = AppStorageV2.connect(
    UserInfoModel,
    AppStorageMap.USER_INFO,
    () => new UserInfoModel(),
  )!;
}

3.2 核心方法

// 获取账号信息
public static getAccountInfo() {
  return AccountUtil._accountInfo;
}

// 获取用户信息
public static getUserInfo() {
  return AccountUtil._userInfo;
}

// 设置用户信息
public static setUserInfo(info: UserInfoModel) {
  AccountUtil._userInfo.avatar = info.avatar;
  AccountUtil._userInfo.nickname = info.nickname;
  AccountUtil._userInfo.phone = info.phone;
}

// 退出登录
public static loginOut() {
  AccountUtil._accountInfo.idToken = '';
  AccountUtil._userInfo.avatar = $r('app.media.user_avatar');
  AccountUtil._userInfo.nickname = $r('app.string.user_name');
  AccountUtil._userInfo.phone = '';
}

四、用户信息页面

4.1 用户信息展示

// MineView.ets 中展示用户信息
Row() {
  Image(AccountUtil.getUserInfo().avatar)
    .width(56).height(56).borderRadius(28);

  Column({ space: 4 }) {
    Text(AccountUtil.getUserInfo().nickname)
      .fontSize(18)
      .fontFamily('鸿蒙黑体')
      .fontWeight(FontWeight.Medium);

    if (AccountUtil.getUserInfo().phone) {
      Text(AccountUtil.getUserInfo().phone)
        .fontSize(12)
        .fontColor($r('app.color.font_primary'));
    }
  }
}
.onClick(() => {
  if (AccountUtil.getAccountInfo().idToken === '') {
    // 未登录,跳转登录页
    this.jumpLoginPage('a000******00');
  } else {
    // 已登录,跳转个人信息页
    this.vm.navStack.pushPathByName('PersonalInfo', undefined);
  }
});

五、总结

AccountUtil 通过 @ObservedV2 + AppStorageV2 实现了账号信息的全局状态管理,支持华为账号登录、用户信息展示、退出登录等完整功能。


关键源码文件:

  • commons/commonLib/src/main/ets/utils/AccountUtil.ets — 账号工具
  • products/entry/src/main/ets/pages/mine/MineView.ets — 用户信息展示
  • products/entry/src/main/ets/pages/mine/PersonalInfo.ets — 个人信息编辑
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐