[文章]基于鸿蒙Next模拟卡片数据数据更新

阅读量0
0
0

一、介绍

基于鸿蒙Next模拟卡片数据数据更新
二、场景需求

电商平台产品信息更新、

客户关系管理(CRM)系统、

社交媒体用户资料更新、

健康管理系统、

项目管理工具、

金融服务应用、

教育管理系统、

在线订餐平台、
三、业务步骤

第一步:输入框输入数据

第二部:保存数据

第三步:返回桌面,点击卡片上的刷新按钮

第四步:刷新卡片数据
四、效果展示
#HarmonyOS NEXT 体验官#卡片数据更新-鸿蒙开发者社区

五:代码展示:

import router from '@ohos.router'
import promptAction from '@ohos.promptAction'
import preferences from '@ohos.data.preferences';
import common from '@ohos.app.ability.common';
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';

let context = getContext(this) as common.UIAbilityContext

@Entry
@Component
struct Index07 {
  @State userName: string = ''
  @State userAge: string = ''
  @State userSex: string = ''
  //控制器
  TextAreaController: TextAreaController = new TextAreaController()

  @Styles
  RowTextInput(){
    .width('100%')
    .margin({ top: 10, left: 10 })
  }

  //本地数据-保存
  preferencesFun() {


    preferences.getPreferences(context, "CardData", (err, pf) => {
      if (err) {
        console.error("preferences failed to code =" + err.code + ";;; message =" + err.message);
        return;
      }
      pf.put('userName', this.userName)
      pf.put('userAge', this.userAge)
      pf.put('userSex', this.userSex)
      pf.flush()
    })
  }

  build() {
    Column() {
      //主体内容-我的卡片
      Column() {
        Column() {
          TextInput({ placeholder: '请输入名字...' })
            .width('80%')
            .onChange((value: string) => {
              this.userName = value
            })
            .margin({ bottom: 20 })
            .backgroundColor(0Xeeeeee)

          TextInput({ placeholder: '请输入年龄...' })
            .width('80%')
            .onChange((value: string) => {
              this.userAge = value
            })
            .margin({ bottom: 20 })
            .backgroundColor(0Xeeeeee)

          TextInput({ placeholder: '请输入性别...' })
            .width('80%')
            .onChange((value: string) => {
              this.userSex = value
            })
            .margin({ bottom: 20 })
            .backgroundColor(0Xeeeeee)

        }.width("100%").alignItems(HorizontalAlign.Center)

        Row() {
          Button('保存到卡片')
            .onClick(() => {
              this.preferencesFun()
            })
        }.width('100%')
        .justifyContent(FlexAlign.Center)

      }
      .width('100%')
      .alignItems(HorizontalAlign.Start)
      .justifyContent(FlexAlign.Start)
      .margin({ bottom: 56 })
      .padding({ right: 12, left: 12 })

    }
  }
}


Widget_zk
let storageUpdateByMsg = new LocalStorage();

@Entry(storageUpdateByMsg)
@Component
struct UpdateByMessageCard {
  @LocalStorageProp('userName') userName: ResourceStr = "李靖婷";
  @LocalStorageProp('userAge') userAge: ResourceStr = "18";
  @LocalStorageProp('userSex') userSex: ResourceStr = "女";

  build() {
    Column() {
      Column() {
        Text(this.userName)
          .opacity(0.9)
          .fontSize(14)
        Text(this.userAge)
          .opacity(0.6)
          .fontSize(12)
        Text(this.userSex)
          .opacity(0.6)
          .fontSize(12)
      }.width('100%')
      .height(80)
      .alignItems(HorizontalAlign.Center)
      .justifyContent(FlexAlign.Center)

      Row() {
        Button('刷新')
        .width(120)
        .borderRadius(16)
        .onClick(() => {
          postCardAction(this, {
            action: 'message',
            params: { msgTest: 'messageEvent' }
          });
        })
      }.width('100%').height('40%')
      .justifyContent(FlexAlign.Center)
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Start)
    .backgroundImageSize(ImageSize.Cover)
  }
}

EntryFormAbility.ets

import { formBindingData, FormExtensionAbility, formInfo, formProvider } from '@kit.FormKit';
import { Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import preferences from '@ohos.data.preferences';
import { hilog } from '@kit.PerformanceAnalysisKit';

const TAG: string = 'EntryFormAbility';
const DOMAIN_NUMBER: number = 0xFF00;

export default class EntryFormAbility extends FormExtensionAbility {
  onAddForm(want: Want) {
    // Called to return a FormBindingData object.
    let formData = '';
    return formBindingData.createFormBindingData(formData);
  }

  onCastToNormalForm(formId: string) {
    // Called when the form provider is notified that a temporary form is successfully
    // converted to a normal form.
  }

  onUpdateForm(formId: string) {
    // Called to notify the form provider to update a specified form.
  }

  onFormEvent(formId: string, message: string) {
    // Called when a specified message event defined by the form provider is triggered.
    hilog.info(DOMAIN_NUMBER, TAG, `FormAbility onFormEvent, formId = ${formId}, message: ${JSON.stringify(message)}`);

    preferences.getPreferences(this.context,'CardData',(err,pf)=>{

      class FormDataClass {
        userName = pf.get('userName', '')
        userAge = pf.get('userAge', '')
        userSex = pf.get('userSex', '')
      }
      let formData = new FormDataClass();
      let formInfo: formBindingData.FormBindingData = formBindingData.createFormBindingData(formData);
      formProvider.updateForm(formId, formInfo).then(() => {
        hilog.info(DOMAIN_NUMBER, TAG, 'FormAbility updateForm success.');
      }).catch((error: BusinessError) => {
        hilog.info(DOMAIN_NUMBER, TAG, `Operation updateForm failed. Cause: ${JSON.stringify(error)}`);
      })
    })

  }

  onRemoveForm(formId: string) {
    // Called to notify the form provider that a specified form has been destroyed.
  }
  onAcquireFormState(want: Want) {
    // Called to return a {@link FormState} object.
    return formInfo.FormState.READY;
  }
};

六、代码结构及原理:
1.整体结构

使用了ArkTS的装饰器语法,如@Entry和@Component组件。使用了动态卡片添加之桌面
2.状态管理:

组件使用@State装饰器定义了几个响应式状态变量
3.UI结构:

主要界面使用嵌套的Column和Row组件构建。
4.数据传递:

当点击"保存"按钮时,主页面会调用preferencesFun()回调函数来本地化保存数据,当点击"刷新"按钮时,会调用postCardAction()回调函数,回调卡片控制器的onFormEvent()函数,更新卡片数据。

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友