会计网站建设,个人做门户网站,wordpress 增加浏览数,百度账号免费注册根据卡片状态刷新不同内容
相同的卡片可以添加到桌面上实现不同的功能#xff0c;比如添加两张桌面的卡片#xff0c;一张显示杭州的天气#xff0c;一张显示北京的天气#xff0c;设置每天早上7点触发定时刷新#xff0c;卡片需要感知当前的配置是杭州还是北京#xff…根据卡片状态刷新不同内容
相同的卡片可以添加到桌面上实现不同的功能比如添加两张桌面的卡片一张显示杭州的天气一张显示北京的天气设置每天早上7点触发定时刷新卡片需要感知当前的配置是杭州还是北京然后将对应城市的天气信息刷新到卡片上以下示例介绍了如何根据卡片的状态动态选择需要刷新的内容。 卡片配置文件配置每天早上7点触发定时刷新 {forms: [{name: widget,description: This is a service widget.,src: ./ets/widget/pages/WidgetCard.ets,uiSyntax: arkts,window: {designWidth: 720,autoDesignWidth: true},colorMode: auto,isDefault: true,updateEnabled: true,scheduledUpdateTime: 07:00,updateDuration: 0,defaultDimension: 2*2,supportDimensions: [2*2]}]
}卡片页面卡片具备不同的状态选择在不同的状态下需要刷新不同的内容因此在状态发生变化时通过postCardAction通知EntryFormAbility。 let storage new LocalStorage();
Entry(storage)
Component
struct WidgetCard {LocalStorageProp(textA) textA: string 待刷新...;LocalStorageProp(textB) textB: string 待刷新...;State selectA: boolean false;State selectB: boolean false;build() {Column() {Row() {Checkbox({ name: checkbox1, group: checkboxGroup }).select(false).onChange((value: boolean) {this.selectA value;postCardAction(this, {action: message,params: {selectA: JSON.stringify(value)}});})Text(状态A)}Row() {Checkbox({ name: checkbox2, group: checkboxGroup }).select(false).onChange((value: boolean) {this.selectB value;postCardAction(this, {action: message,params: {selectB: JSON.stringify(value)}});})Text(状态B)}Row() { // 选中状态A才会进行刷新的内容Text(状态A: )Text(this.textA)}Row() { // 选中状态B才会进行刷新的内容Text(状态B: )Text(this.textB)}}.padding(10%)}
}EntryFormAbility将卡片的状态存储在本地数据库中在刷新事件回调触发时通过formId获取当前卡片的状态然后根据卡片的状态选择不同的刷新内容。 import formInfo from ohos.app.form.formInfo
import formProvider from ohos.app.form.formProvider;
import formBindingData from ohos.app.form.formBindingData;
import FormExtensionAbility from ohos.app.form.FormExtensionAbility;
import dataStorage from ohos.data.storageexport default class EntryFormAbility extends FormExtensionAbility {onAddForm(want) {let formId want.parameters[formInfo.FormParam.IDENTITY_KEY];let isTempCard: boolean want.parameters[formInfo.FormParam.TEMPORARY_KEY];if (isTempCard false) { // 如果为常态卡片直接进行信息持久化console.info(Not temp card, init db for: formId);let storeDB dataStorage.getStorageSync(this.context.filesDir myStore)storeDB.putSync(A formId, false);storeDB.putSync(B formId, false);storeDB.flushSync();}let formData {};return formBindingData.createFormBindingData(formData);}onRemoveForm(formId) {console.info(onRemoveForm, formId: formId);let storeDB dataStorage.getStorageSync(this.context.filesDir myStore)storeDB.deleteSync(A formId);storeDB.deleteSync(B formId);}// 如果在添加时为临时卡片则建议转为常态卡片时进行信息持久化onCastToNormalForm(formId) {console.info(onCastToNormalForm, formId: formId);let storeDB dataStorage.getStorageSync(this.context.filesDir myStore)storeDB.putSync(A formId, false);storeDB.putSync(B formId, false);storeDB.flushSync();}onUpdateForm(formId) {let storeDB dataStorage.getStorageSync(this.context.filesDir myStore)let stateA storeDB.getSync(A formId, false).toString()let stateB storeDB.getSync(B formId, false).toString()// A状态选中则更新textAif (stateA true) {let formInfo formBindingData.createFormBindingData({textA: AAA})formProvider.updateForm(formId, formInfo)}// B状态选中则更新textBif (stateB true) {let formInfo formBindingData.createFormBindingData({textB: BBB})formProvider.updateForm(formId, formInfo)}}onFormEvent(formId, message) {// 存放卡片状态console.info(onFormEvent formId: formId msg: message);let storeDB dataStorage.getStorageSync(this.context.filesDir myStore)let msg JSON.parse(message)if (msg.selectA ! undefined) {console.info(onFormEvent selectA info: msg.selectA);storeDB.putSync(A formId, msg.selectA);}if (msg.selectB ! undefined) {console.info(onFormEvent selectB info: msg.selectB);storeDB.putSync(B formId, msg.selectB);}storeDB.flushSync();}
};说明
通过本地数据库进行卡片信息的持久化时建议先在onAddForm生命周期中通过TEMPORARY_KEY判断当前添加的卡片是否为常态卡片如果是常态卡片则直接进行卡片信息持久化如果为临时卡片则可以在卡片转为常态卡片(onCastToNormalForm)时进行持久化同时需要在卡片销毁(onRemoveForm)时删除当前卡片存储的持久化信息避免反复添加删除卡片导致数据库文件持续变大。
使用方刷新卡片内容仅对系统应用开放
当使用方添加了一些周期性刷新的卡片后由于周期性刷新的时间间隔限制可以在使用方中提供按钮主动触发卡片的刷新。这种场景下使用方可以通过调用requestForm接口请求卡片刷新系统会调用卡片提供方FormExtensionAbility中的onUpdateForm生命周期回调在回调中可以使用updateForm接口刷新卡片内容。onUpdateForm生命周期回调参考通过FormExtensionAbility刷新卡片内容。
import formHost from ohos.app.form.formHost;Entry()
Component
struct WidgetCard {formId ...; // 卡片IDbuild() {Button(刷新卡片).type(ButtonType.Capsule).width(50%).height(50).onClick(() {console.info(FormAbility update form click);// formId需要为实际需要刷新的卡片IDformHost.requestForm(this.formId.toString()).then(() {console.info(Succeeded in requestForming.);});})...}
}