• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 卡片编辑开发指导
2<!--Kit: Form Kit-->
3<!--Subsystem: Ability-->
4<!--Owner: @cx983299475-->
5<!--Designer: @xueyulong-->
6<!--Tester: @chenmingze-->
7<!--Adviser: @Brilliantry_Rui-->
8从API version 18开始,桌面提供统一的卡片编辑页,卡片提供方使用卡片框架提供的[FormEditExtensionAbility](../reference/apis-form-kit/js-apis-app-form-formEditExtensionAbility.md)开发卡片编辑功能。
9
10## 开发步骤
111. 在工程的entry模块中,新建名为EntryFormEditAbility的代码文件。在EntryFormEditAbility文件中,实现[startSecondPage](../reference/apis-form-kit/js-apis-inner-application-formEditExtensionContext.md#startsecondpage)方法,在[onSessionCreate](../reference/apis-ability-kit/js-apis-app-ability-uiExtensionAbility.md#onsessioncreate)回调方法中,加载一级卡片编辑页,并将startSecondPage方法的实现传递给一级卡片编辑页。
12    ```ts
13    // src/main/ets/entryformeditability/EntryFormEditAbility.ets
14
15    import { FormEditExtensionAbility } from '@kit.FormKit';
16    import { Want,UIExtensionContentSession } from '@kit.AbilityKit';
17    import { ExtensionEvent } from '../pages/model/ExtensionEvent';
18
19    const TAG: string = 'FormEditDemo[EntryFormEditAbility] -->';
20    export default class EntryFormEditAbility extends FormEditExtensionAbility {
21      onCreate() {
22        console.info(`${TAG} onCreate`);
23      }
24      onForeground(): void {
25        console.info(`${TAG} EntryFormEditAbility onForeground.....`);
26      }
27      onBackground(): void {
28        console.info(`${TAG} EntryFormEditAbility onBackground......`);
29      }
30      onDestroy(): void {
31        console.info(`${TAG} EntryFormEditAbility onDestroy......`);
32      }
33      onSessionCreate(want: Want, session: UIExtensionContentSession) {
34        console.info(`${TAG} onSessionCreate start..... want: ${JSON.stringify(want)}`);
35        let storage: LocalStorage = new LocalStorage();
36        let extensionEvent: ExtensionEvent = new ExtensionEvent();
37        extensionEvent.setStartSecondPage(() => this.startSecondPage());
38        storage.setOrCreate('extensionEvent', extensionEvent);
39        try {
40          session.loadContent('pages/Extension', storage);
41        } catch (e) {
42          console.error(`${TAG} EntryFormEditAbility loadContent err, want: ${JSON.stringify(e)}`);
43        }
44      }
45      onSessionDestroy(session: UIExtensionContentSession) {
46        console.info(`${TAG} onSessionDestroy`);
47      }
48      private startSecondPage(): void {
49        const bundleName: string = this.context.extensionAbilityInfo.bundleName;
50        const secPageAbilityName: string = 'FormEditSecPageAbility';
51        console.info(`${TAG} startSecondPage. bundleName: ${bundleName}, secPageAbilityName: ${secPageAbilityName}.`);
52        try {
53          this.context.startSecondPage({
54            bundleName: bundleName,
55            parameters: {
56              "secPageAbilityName": secPageAbilityName
57            }
58          });
59        } catch (err) {
60          console.error(`${TAG} startSecondPage failed: ${err}`);
61        }
62      }
63    };
64    ```
65
662. 新增Extension文件,用于展示卡片一级编辑页。
67    ```ts
68    // src/main/ets/pages/Extension.ets
69
70    import { UIExtensionContentSession } from '@kit.AbilityKit';
71    import { ExtensionEvent } from './model/ExtensionEvent';
72
73    let storage = new LocalStorage();
74    const TAG: string = 'FormEditDemo[Extension] -->';
75    @Entry(storage)
76    @Component
77    struct Extension {
78      @State message: string = 'UIExtension Provider';
79      private session: UIExtensionContentSession | undefined = storage.get<UIExtensionContentSession>('session');
80      private extensionEvent: ExtensionEvent | undefined = storage.get<ExtensionEvent>('extensionEvent');
81      onPageShow() {
82        console.info(`${TAG} onPageShow. extensionEvent: ${JSON.stringify(this.extensionEvent)}, session: ${JSON.stringify(this.session)}.`);
83      }
84      build() {
85        Row() {
86          Column() {
87            Text(this.message)
88              .fontSize(20)
89              .fontWeight(FontWeight.Bold)
90              .textAlign(TextAlign.Center)
91            Button("添加")
92              .width('80%')
93              .type(ButtonType.Capsule)
94              .margin({
95                top: 20
96              })
97              .onClick(() => {
98                console.info(`${TAG} Button onClick`);
99                this.extensionEvent?.startFormEditSecondPage();
100              })
101          }
102        }
103        .justifyContent(FlexAlign.Center)
104        .width('100%')
105      }
106    }
107    ```
108
1093. 新增ExtensionEvent文件,使用startFormEditSecondPage方法调用[startSecondPage](../reference/apis-form-kit/js-apis-inner-application-formEditExtensionContext.md#startsecondpage)方法。
110    ```ts
111    // src/main/ets/widget/pages/model/ExtensionEvent.ets
112
113    const TAG: string = 'FormEditDemo[ExtensionEvent] -->';
114    export class ExtensionEvent {
115      private startSecondPage: () => void = () => {
116        console.info(`${TAG} startSecondPage is empty!`);
117      };
118      public setStartSecondPage(startSecondPage: () => void) {
119        console.info(`${TAG} setStartSecondPage`);
120        this.startSecondPage = startSecondPage;
121      }
122      public startFormEditSecondPage(): void {
123        console.info(`${TAG} startFormEditSecondPage`);
124        this.startSecondPage();
125      }
126    }
127
128    ```
129
1304. 在应用的[module.json5](../quick-start/module-configuration-file.md)配置文件中添加卡片编辑配置信息。
131    ```json
132    "extensionAbilities": [
133      {
134        "name": "EntryFormEditAbility",
135        "srcEntry": "./ets/entryformeditability/EntryFormEditAbility.ets",
136        "type": "formEdit"
137      }
138    ]
139    ```
140
1415. 在卡片的[form_config.json](./arkts-ui-widget-configuration.md#配置文件字段说明)配置文件中添加formConfigAbility配置项信息。
142    ```json
143    {
144      "forms": [
145        {
146          "name": "widget",
147          "displayName": "$string:widget_display_name",
148          "description": "$string:widget_desc",
149          "src": "./ets/widget/pages/WidgetCard.ets",
150          "uiSyntax": "arkts",
151          "formConfigAbility": "ability://EntryFormEditAbility",
152          "window": {
153            "designWidth": 720,
154            "autoDesignWidth": true
155          },
156          "colorMode": "auto",
157          "isDynamic": true,
158          "isDefault": true,
159          "updateEnabled": false,
160          "scheduledUpdateTime": "10:30",
161          "updateDuration": 1,
162          "defaultDimension": "1*2",
163          "supportDimensions": [
164            "1*2",
165            "2*2",
166            "2*4",
167            "4*4"
168          ]
169        }
170      ]
171    }
172    ```
1736. 在开发视图的resource/base/profile/main_pages.json文件中,注册Extension页面文件。
174    ```json
175    {
176      "src": [
177        "pages/Index",
178        "pages/Extension"
179      ]
180    }
181    ```