# FormComponent (System API)
The **FormComponent** is used to display widgets.
> **NOTE**
>
> - This component is supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version.
>
> - This component is intended for the widget host. For details about the widget provider, see [JS Service Widget UI Components](../js-service-widget-ui/js-service-widget-file.md).
>
> - To use this component, you must have the system signature.
>
> - The APIs provided by this module are system APIs.
## Required Permissions
ohos.permission.REQUIRE_FORM, ohos.permission.GET_BUNDLE_INFO_PRIVILEGED
## Child Components
Not supported
## APIs
FormComponent (value: FormInfo)
Creates a **FormComponent** instance to display the provided widget.
**Parameters**
| Name | Type | Mandatory | Description |
| --------- | ------------------------------- | ---- | ----------------------------------------------------------------------- |
| value | [FormInfo](#forminfo12) | Yes | Widget information. |
## FormInfo12+
Provides the widget information.
| Name | Type | Mandatory | Description |
| --------- | ------------------------------- | ---- |-------|
| id | number \| string | Yes | Widget ID. Set this parameter to **0** for a new widget.
**NOTE**
Different widget hosts cannot use the same ID.
If a widget host uses the same ID for two widgets, the one added later is displayed. |
| name | string | Yes | Widget name. |
| bundle | string | Yes | Bundle name of the widget. |
| ability | string | Yes | Ability name of the widget. |
| module | string | Yes | Module name of the widget. |
| dimension | [FormDimension](#formdimension) | No | Dimensions of the widget. The widgets in the 2 x 2, 4 x 4, and 4 x 2 dimensions are supported.
Default value: **Dimension_2_2** |
| temporary | boolean | No | Whether the widget is a temporary one. |
| renderingMode | [FormRenderingMode](#formrenderingmode11) | No | Widget rendering mode. The options are as follows:
- **FULL_COLOR** (default): full color mode, where the widget framework does not change the widget effect, which means that the widget is displayed in the effect as you set it.
- **SINGLE_COLOR**: single color mode, where the widget framework sets the widget background to transparent. In this mode you need to set the widget style based on the best practices.
**NOTE**
If the system does not support unified rendering, the widget framework does not set the widget background to transparent in single color mode. |
## FormCallbackInfo12+
Represents the parameters for obtaining a widget ID (**formId**) when querying or uninstalling a widget.
| Name | Type | Mandatory | Description |
| --------- | ------------------------------- | ---- | ----------------------------------------------------------------------- |
| id | number | Yes | Widget ID of the number type.
**NOTE**
If the obtained ID is **-1**, the ID is greater than or equal to 2^53. In this case, you need to use **idString** to obtain the ID. |
| idString | string | Yes | Widget ID of the string type.
|
## FormDimension
| Name | Description |
| -------------------------- | -------- |
| Dimension_1_2 | 1 x 2 widget. |
| Dimension_2_2 | 2 x 2 widget. |
| Dimension_2_4 | 2 x 4 widget. |
| Dimension_4_4 | 4 x 4 widget. |
| Dimension_2_19+ | 2 x 1 widget. |
| Dimension_1_111+ | 1 x 1 widget. |
| Dimension_6_412+ | 6 x 4 widget. |
## FormRenderingMode11+
| Name | Description |
| -------------------------- | -------- |
| FULL_COLOR | Full color mode.|
| SINGLE_COLOR | Single color mode.|
## Attributes
### size
size(value: { width: number; height: number })
Sets the size for the widget.
**System API**: This is a system API.
**System capability**: SystemCapability.ArkUI.ArkUI.Full
**Parameters**
| Name | Type | Mandatory | Description |
| ------ | --------------------------------------------------------- | ---- | ---------- |
| value | {
width?: number,
height?: number
} | Yes | Width and height. |
### moduleName
moduleName(value: string)
Sets the module name for the widget.
**System API**: This is a system API.
**System capability**: SystemCapability.ArkUI.ArkUI.Full
**Parameters**
| Name | Type | Mandatory | Description |
| ------ | ------ | ---- | -------------- |
| value | string | Yes | Module name of the widget. |
### dimension
dimension(value: FormDimension)
Sets the dimensions for the widget. The 2 x 2, 4 x 4, and 4 x 2 options are available.
**System API**: This is a system API.
**System capability**: SystemCapability.ArkUI.ArkUI.Full
**Parameters**
| Name | Type | Mandatory | Description |
| ------ | ------------------------------- | ---- | ------------------------------------ |
| value | [FormDimension](#formdimension) | Yes | Dimensions of the widget.
Default value: **Dimension_2_2** |
### allowUpdate
allowUpdate(value: boolean)
Sets whether to allow the widget to update.
**System API**: This is a system API.
**System capability**: SystemCapability.ArkUI.ArkUI.Full
**Parameters**
| Name | Type | Mandatory | Description |
| ------ | ------- | ---- | ----------------------------------- |
| value | boolean | Yes | Whether to allow the widget to update.
Default value: **true** |
### visibility
visibility(value: Visibility)
Sets whether the widget is visible.
**System API**: This is a system API.
**System capability**: SystemCapability.ArkUI.ArkUI.Full
**Parameters**
| Name | Type | Mandatory | Description |
| ------ | --------------------------------------------- | ---- | -------------------------------------- |
| value | [Visibility](ts-appendix-enums.md#visibility) | Yes | Whether the widget is visible.
Default value: **Visible** |
## Events
### onAcquired
onAcquired(callback: Callback[\](#formcallbackinfo12)): FormComponentAttribute
Called when the widget is obtained.
**System API**: This is a system API.
**System capability**: SystemCapability.ArkUI.ArkUI.Full
**Parameters**
| Name | Type | Mandatory | Description |
| ------ | ----------------------------------- | ---- | ---------- |
| Callback | [FormCallbackInfo](#formcallbackinfo12) | Yes | Widget ID. |
### onError
onError(callback: (info: { errcode: number; msg: string }) => void)
Called when an error occurs during component loading.
**System API**: This is a system API.
**System capability**: SystemCapability.ArkUI.ArkUI.Full
**Parameters**
| Name | Type | Mandatory | Description |
| ------ | ------------------------------------------------------------ | ---- | ----------------------------------------------- |
| info | { errcode: number, msg: string } | Yes | **errcode**: error code.
**msg**: error information. |
### onRouter
onRouter(callback: (info: any) => void)
Called when routing occurs for the widget. This API returns information in [routerEvent](../js-service-widget-ui/js-service-widget-syntax-hml.md#event-binding).
**System API**: This is a system API.
**System capability**: SystemCapability.ArkUI.ArkUI.Full
**Parameters**
| Name | Type | Mandatory | Description |
| ------ | ---- | ---- | ------------------------------------------------------------ |
| info | any | Yes | Information in [routerEvent](../js-service-widget-ui/js-service-widget-syntax-hml.md#event-binding). |
### onUninstall
onUninstall(callback: Callback[\](#formcallbackinfo12)): FormComponentAttribute
Called when the widget is uninstalled. This API returns the ID of the uninstalled widget.
**System API**: This is a system API.
**System capability**: SystemCapability.ArkUI.ArkUI.Full
**Parameters**
| Name | Type | Mandatory | Description |
| ------ | ----------------------------------- | ---- | ---------- |
| Callback | [FormCallbackInfo](#formcallbackinfo12) | Yes | Widget ID. |
## Example
This example creates a 2 x 2 widget and registers event callbacks.
```ts
//card.ets
@Entry
@Component
struct CardExample {
@State formId:string = '0';
build() {
Column() {
Text('this is a card')
.fontSize(50)
.fontWeight(FontWeight.Bold)
FormComponent({
id:this.formId,
name:"Form1",
bundle:"com.example.cardexample",
ability:"FormAbility",
module:"entry",
dimension:FormDimension.Dimension_2_2,
temporary:false
})
.allowUpdate(true)
.size({width:360,height:360})
.visibility(Visibility.Visible)
.onAcquired((form: FormCallbackInfo)=>{
console.log(`form info : ${JSON.stringify(form)}`);
// Invalid form id
if (form.id == -1) {
this.formId = form.idString;
} else {
this.formId = form.id.toString();
}
})
.onError((err)=>{
console.log(`fail to add form, err: ${JSON.stringify(err)}`);
})
.onUninstall((form: FormCallbackInfo)=>{
console.log(`uninstall form success : ${JSON.stringify(form)}`);
// Invalid form id
if (form.id == -1) {
this.formId = form.idString;
} else {
this.formId = form.id.toString();
}
})
}
.width('100%')
.height('100%')
}
}
```
