# State Management with Application-level Variables The state management module provides data storage, persistent data management, UIAbility data storage, and environment state required by applications. >**NOTE** > >The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. The meanings of T and S in this topic are as follows: | Type | Description | | ---- | -------------------------------------- | | T | Class, number, boolean, string, and arras of these types.| | S | number, boolean, string. | ## AppStorage For details about how to use AppStorage on the UI, see [AppStorage: Application-wide UI State Storage](../../../quick-start/arkts-appstorage.md). ### link10+ static link<T>(propName: string): SubscribedAbstractProperty<T> Establishes two-way data binding with the given attribute (specified by **propName**) in AppStorage. If the given attribute exists in AppStorage, the two-way bound data of the attribute in AppStorage is returned. Any update of the data is synchronized back to AppStorage, which then synchronizes the update to all data and custom components bound to the attribute. If the given attribute does not exist in AppStorage, **undefined** is returned. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | ----------------------------------- | ------------------------------------------------------------ | | SubscribedAbstractProperty<T> | Returns two-way bound data if specified attribute exists in AppStorage; returns **undefined** otherwise.| **Example** ```ts AppStorage.setOrCreate('PropA', 47); let linkToPropA1: SubscribedAbstractProperty = AppStorage.link('PropA'); let linkToPropA2: SubscribedAbstractProperty = AppStorage.link('PropA'); // linkToPropA2.get() == 47 linkToPropA1.set(48); // Two-way synchronization: linkToPropA1.get() == linkToPropA2.get() == 48 ``` ### setAndLink10+ static setAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> Works in a way similar to the **link** API. If the given attribute exists in AppStorage, the two-way bound data of the attribute in AppStorage is returned. If the given attribute does not exist, it is created and initialized with **defaultValue** in AppStorage, and two-way bound data is returned. The value of **defaultValue** must be of the T type and cannot be **undefined** or **null**. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | ------ | ---- | ------------------------------------------------------------ | | propName | string | Yes | Attribute name in AppStorage. | | defaultValue | T | Yes | Default value used to initialize the attribute with the specified attribute name in AppStorage. The value cannot be **undefined** or **null**.| **Return value** | Type | Description | | ----------------------------------- | ---------------------------------------- | | SubscribedAbstractProperty<T> | Instance of **SubscribedAbstractProperty<T>** and two-way bound data of the given attribute in AppStorage.| **Example** ```ts AppStorage.setOrCreate('PropA', 47); let link1: SubscribedAbstractProperty = AppStorage.setAndLink('PropB', 49); // Create PropB 49 let link2: SubscribedAbstractProperty = AppStorage.setAndLink('PropA', 50); // PropA exists, remains 47 ``` ### prop10+ static prop<T>(propName: string): SubscribedAbstractProperty<T> Establishes one-way data binding with the given attribute (specified by **propName**) in AppStorage. If the given attribute exists in AppStorage, the one-way bound data of the attribute in AppStorage is returned. If the given attribute does not exist in AppStorage, **undefined** is returned. Updates of the one-way bound data are not synchronized back to AppStorage. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | ----------------------------------- | ------------------------------------------------------------ | | SubscribedAbstractProperty<T> | Returns one-way bound data if specified attribute exists in AppStorage; returns **undefined** otherwise.| **Example** ```ts AppStorage.setOrCreate('PropA', 47); let prop1: SubscribedAbstractProperty = AppStorage.prop('PropA'); let prop2: SubscribedAbstractProperty = AppStorage.prop('PropA'); prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47 ``` ### setAndProp10+ static setAndProp<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> Works in a way similar to the **prop** API. If the given attribute exists in AppStorage, the one-way bound data of the attribute in AppStorage is returned. If the given attribute does not exist, it is created and initialized with **defaultValue** in AppStorage, and one-way bound data is returned. The value of **defaultValue** must be of the T type and cannot be **undefined** or **null**. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | ------ | ---- | ------------------------------------------------------------ | | propName | string | Yes | Attribute name in AppStorage. | | defaultValue | T | Yes | Default value used to initialize the attribute with the specified attribute name in AppStorage. The value cannot be **undefined** or **null**.| **Return value** | Type | Description | | ----------------------------------- | --------------------------------------- | | SubscribedAbstractProperty<T> | Instance of **SubscribedAbstractProperty<T>**.| **Example** ```ts AppStorage.setOrCreate('PropA', 47); let prop: SubscribedAbstractProperty = AppStorage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49 ``` ### has10+ static has(propName: string): boolean Checks whether the attribute with the specified attribute name exists in AppStorage. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | ------- | ---------------------------------------- | | boolean | Returns **true** if the attribute with the specified attribute name exists in AppStorage; returns **false** otherwise.| **Example** ```ts AppStorage.has('simpleProp'); ``` ### get10+ static get<T>(propName: string): T | undefined Obtains the attribute with the specified attribute name in AppStorage. If the attribute does not exist, **undefined** is returned. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | ------------------------ | ----------------------------------------------------------- | | T \| undefined | Returns the attribute with the specified attribute name in AppStorage; returns **undefined** if the attribute does not exist.| **Example** ```ts AppStorage.setOrCreate('PropA', 47); let value: number = AppStorage.get('PropA') as number; // 47 ``` ### set10+ static set<T>(propName: string, newValue: T): boolean Sets the value for the attribute with the specified attribute name in AppStorage. If the value of **newValue** is the same as the value of the attribute with the specified attribute name, that is, no value needs to be assigned, the state variable will not instruct the UI to update the value of attribute. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------------- | | propName | string | Yes | Attribute name in AppStorage. | | newValue | T | Yes | Attribute value, which cannot be **undefined** or **null**.| **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **true** if the operation is successful; return **false** if the attribute with the specified attribute name does not exist in AppStorage, or the value to set is **undefined** or **null**. | **Example** ```ts AppStorage.setOrCreate('PropA', 48); let res: boolean = AppStorage.set('PropA', 47) // true let res1: boolean = AppStorage.set('PropB', 47) // false ``` ### setOrCreate10+ static setOrCreate<T>(propName: string, newValue: T): void Sets a new value for the attribute with the specified attribute name in AppStorage or, if the attribute does not exist, creates one with the specified attribute name and the set value. If the new value is the same as the existing value of the attribute with the specified attribute name, the state variable will not instruct the UI to update the value of the attribute. This **setOrCreate** method creates only one AppStorage key-value pair. To create multiple key-value pairs, call this method multiple times. The value of **newValue** cannot be **undefined** or **null**. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------------- | | propName | string | Yes | Attribute name in AppStorage. | | newValue | T | Yes | Attribute value, which cannot be **undefined** or **null**.| **Example** ```ts AppStorage.setOrCreate('simpleProp', 121); ``` ### delete10+ static delete(propName: string): boolean Deletes the attribute with the specified attribute name from AppStorage under the prerequisite that the attribute does not have a subscriber. If there is a subscriber, **false** is returned. If the deletion is successful, **true** is returned. The subscribers of the attribute are attributes with the same name bound to APIs such as **link** and **prop**, **\@StorageLink('propName')**, and **\@StorageProp('propName')**. This means that if @StorageLink('propName') and @StorageProp('propName') are used in a custom component or if there is still a **SubscribedAbstractProperty** instance in sync with the attribute, the attribute cannot be deleted from AppStorage. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | ------- | ---------------------------------------- | | boolean | Returns **true** if the operation is successful; returns **false** otherwise.| **Example** ```ts AppStorage.setOrCreate('PropA', 47); AppStorage.link('PropA'); let res: boolean = AppStorage.delete('PropA'); // false, PropA still has a subscriber AppStorage.setOrCreate('PropB', 48); let res1: boolean = AppStorage.delete('PropB'); // true, PropB is deleted from AppStorage successfully ``` ### keys10+ static keys(): IterableIterator<string> Obtains all attribute names in AppStorage. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------------------------------ | ------------------ | | IterableIterator<string> | All attribute names in AppStorage.| **Example** ```ts AppStorage.setOrCreate('PropB', 48); let keys: IterableIterator = AppStorage.keys(); ``` ### clear10+ static clear(): boolean Deletes all attributes from AppStorage under the prerequisite that none of the attributes has a subscriber. If any of the attributes has a subscriber, this API does not take effect and **false** is returned. If the deletion is successful, **true** is returned. For details about the subscriber, see [delete](#delete10). **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **true** if the operation is successful; returns **false** otherwise.| **Example** ```ts AppStorage.setOrCreate('PropA', 47); let res: boolean = AppStorage.clear(); // true, there are no subscribers ``` ### size10+ static size(): number Obtains the number of attributes in AppStorage. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------ | ------------------- | | number | Number of attributes in AppStorage.| **Example** ```ts AppStorage.setOrCreate('PropB', 48); let res: number = AppStorage.size(); // 1 ``` ### Link(deprecated) static Link(propName: string): any Establishes two-way data binding with the given attribute (specified by **propName**) in AppStorage. If the given attribute exists in AppStorage, the two-way bound data of the attribute in AppStorage is returned. Any update of the data is synchronized back to AppStorage, which then synchronizes the update to all data and custom components bound to the attribute. If the given attribute does not exist in AppStorage, **undefined** is returned. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [link10+](#link10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | -------------------------------- | ------------------------------------------------------------ | | any | Returns two-way bound data if specified attribute exists in AppStorage; returns **undefined** otherwise.| **Example** ```ts AppStorage.SetOrCreate('PropA', 47); let linkToPropA1: SubscribedAbstractProperty = AppStorage.Link('PropA'); let linkToPropA2: SubscribedAbstractProperty = AppStorage.Link('PropA'); // linkToPropA2.get() == 47 linkToPropA1.set(48); // Two-way synchronization: linkToPropA1.get() == linkToPropA2.get() == 48 ``` ### SetAndLink(deprecated) static SetAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> Works in a way similar to the **Link** API. If the given attribute exists in AppStorage, the two-way bound data of the attribute in AppStorage is returned. If the given attribute does not exist, it is created and initialized with **defaultValue** in AppStorage, and two-way bound data is returned. The value of **defaultValue** must be of the T type and cannot be **undefined** or **null**. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [setAndLink10+](#setandlink10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | ------ | ---- | ------------------------------------------------------------ | | propName | string | Yes | Attribute name in AppStorage. | | defaultValue | T | Yes | Default value used to initialize the attribute with the specified attribute name in AppStorage. The value cannot be **undefined** or **null**.| **Return value** | Type | Description | | ----------------------------------- | ---------------------------------------- | | SubscribedAbstractProperty<T> | Instance of **SubscribedAbstractProperty<T>** and two-way bound data of the given attribute in AppStorage.| **Example** ```ts AppStorage.SetOrCreate('PropA', 47); let link1: SubscribedAbstractProperty = AppStorage.SetAndLink('PropB', 49); // Create PropB 49 let link2: SubscribedAbstractProperty = AppStorage.SetAndLink('PropA', 50); // PropA exists, remains 47 ``` ### Prop(deprecated) static Prop(propName: string): any Establishes one-way data binding with the given attribute (specified by **propName**) in AppStorage. If the given attribute exists in AppStorage, the one-way bound data of the attribute in AppStorage is returned. If the given attribute does not exist in AppStorage, **undefined** is returned. Updates of the one-way bound data are not synchronized back to AppStorage. > **NOTE** > > Prop supports only simple types. > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [prop10+](#prop10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | -------------------------------- | ------------------------------------------------------------ | | any | Returns one-way bound data if specified attribute exists in AppStorage; returns **undefined** otherwise.| **Example** ```ts AppStorage.SetOrCreate('PropA', 47); let prop1: SubscribedAbstractProperty = AppStorage.Prop('PropA'); let prop2: SubscribedAbstractProperty = AppStorage.Prop('PropA'); prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47 ``` ### SetAndProp(deprecated) static SetAndProp<S>(propName: string, defaultValue: S): SubscribedAbstractProperty<S> Works in a way similar to the **Prop** API. If the given attribute exists in AppStorage, the one-way bound data of the attribute in AppStorage is returned. If the given attribute does not exist, it is created and initialized with **defaultValue** in AppStorage, and one-way bound data is returned. The value of **defaultValue** must be of the S type and cannot be **undefined** or **null**. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [setAndProp10+](#setandprop10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | ------ | ---- | ------------------------------------------------------------ | | propName | string | Yes | Attribute name in AppStorage. | | defaultValue | S | Yes | Default value used to initialize the attribute with the specified attribute name in AppStorage. The value cannot be **undefined** or **null**.| **Return value** | Type | Description | | ----------------------------------- | --------------------------------------- | | SubscribedAbstractProperty<S> | Instance of **SubscribedAbstractProperty<S>**.| **Example** ```ts AppStorage.SetOrCreate('PropA', 47); let prop: SubscribedAbstractProperty = AppStorage.SetAndProp('PropB', 49); // PropA -> 47, PropB -> 49 ``` ### Has(deprecated) static Has(propName: string): boolean Checks whether the attribute with the specified attribute name exists in AppStorage. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [has10+](#has10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | ------- | ---------------------------------------- | | boolean | Returns **true** if the attribute with the specified attribute name exists in AppStorage; returns **false** otherwise.| **Example** ```ts AppStorage.Has('simpleProp'); ``` ### Get(deprecated) static Get<T>(propName: string): T | undefined Obtains the attribute with the specified attribute name in AppStorage. If the attribute does not exist, **undefined** is returned. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [get10+](#get10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | ------------------------ | ------------------------------------------------------------ | | T \| undefined | Returns the attribute with the specified attribute name in AppStorage; returns **undefined** if the attribute does not exist.| **Example** ```ts AppStorage.SetOrCreate('PropA', 47); let value: number = AppStorage.Get('PropA') as number; // 47 ``` ### Set(deprecated) static Set<T>(propName: string, newValue: T): boolean Sets the value for the attribute with the specified attribute name in AppStorage. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [set10+](#set10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------------- | | propName | string | Yes | Attribute name in AppStorage. | | newValue | T | Yes | Attribute value, which cannot be **undefined** or **null**.| **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **true** if the operation is successful; return **false** if the attribute with the specified attribute name does not exist in AppStorage, or the value to set is **undefined** or **null**. | **Example** ```ts AppStorage.SetOrCreate('PropA', 48); let res: boolean = AppStorage.Set('PropA', 47) // true let res1: boolean = AppStorage.Set('PropB', 47) // false ``` ### SetOrCreate(deprecated) static SetOrCreate<T>(propName: string, newValue: T): void Sets a new value for the attribute with the specified attribute name in AppStorage or, if the attribute does not exist, creates one with the specified attribute name and default value. The value of **newValue** cannot be **undefined** or **null**. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [setOrCreate10+](#setorcreate10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------------- | | propName | string | Yes | Attribute name in AppStorage. | | newValue | T | Yes | Attribute value, which cannot be **undefined** or **null**.| **Example** ```ts AppStorage.SetOrCreate('simpleProp', 121); ``` ### Delete(deprecated) static Delete(propName: string): boolean Deletes the attribute with the specified attribute name from AppStorage under the prerequisite that the attribute does not have a subscriber. If there is a subscriber, **false** is returned. If the deletion is successful, **true** is returned. The subscribers of the attribute are attributes with the same name bound to APIs such as **Link** and **Prop**, **\@StorageLink('propName')**, and **\@StorageProp('propName')**. This means that if @StorageLink('propName') and @StorageProp('propName') are used in a custom component or if there is still a **SubscribedAbstractProperty** instance in sync with the attribute, the attribute cannot be deleted from AppStorage. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [delete10+](#delete10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | ------- | ---------------------------------------- | | boolean | Returns **true** if the operation is successful; returns **false** otherwise.| **Example** ```ts AppStorage.SetOrCreate('PropA', 47); AppStorage.Link('PropA'); let res: boolean = AppStorage.Delete('PropA'); // false, PropA still has a subscriber AppStorage.SetOrCreate('PropB', 48); let res1: boolean = AppStorage.Delete('PropB'); // true, PropB is deleted from AppStorage successfully ``` ### Keys(deprecated) static Keys(): IterableIterator<string> Obtains all attribute names in AppStorage. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [keys10+](#keys10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------------------------------ | ------------------ | | IterableIterator<string> | All attribute names in AppStorage.| **Example** ```ts AppStorage.SetOrCreate('PropB', 48); let keys: IterableIterator = AppStorage.Keys(); ``` ### staticClear(deprecated) static staticClear(): boolean Deletes all attributes. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 9. You are advised to use [clear10+](#clear10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------- | --------------------------------- | | boolean | Returns **true** if all attributes are deleted; returns **false** if any of the attributes is being referenced by a state variable.| **Example** ```ts let simple = AppStorage.staticClear(); ``` ### Clear(deprecated) static Clear(): boolean Deletes all attributes from AppStorage under the prerequisite that none of the attributes has a subscriber. If any of the attributes has a subscriber, this API does not take effect and **false** is returned. If the deletion is successful, **true** is returned. For details about the subscriber, see [delete](#delete10). > **NOTE** > > This API is supported since API version 9 and deprecated since API version 10. You are advised to use [clear10+](#clear10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **true** if the operation is successful; returns **false** otherwise.| **Example** ```typescript AppStorage.SetOrCreate('PropA', 47); let res: boolean = AppStorage.Clear(); // true, there are no subscribers ``` ### IsMutable(deprecated) static IsMutable(propName: string): boolean Checks whether the given attribute in AppStorage name is mutable. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ---------------- | | propName | string | Yes | Attribute name in AppStorage.| **Return value** | Type | Description | | ------- | -------------------------------- | | boolean | Whether the given attribute in AppStorage name is mutable.| **Example** ```ts AppStorage.SetOrCreate('PropA', 47); let res: boolean = AppStorage.IsMutable('simpleProp'); ``` ### Size(deprecated) static Size(): number Obtains the number of attributes in AppStorage. > **NOTE** > > This API is supported since API version 7 and deprecated since API version 10. You are advised to use [size10+](#size10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------ | ------------------- | | number | Number of attributes in AppStorage.| **Example** ```ts AppStorage.SetOrCreate('PropB', 48); let res: number = AppStorage.Size(); // 1 ``` ## LocalStorage9+ For details about how to use LocalStorage on the UI, see [LocalStorage: UI State Storage](../../../quick-start/arkts-localstorage.md). ### constructor9+ constructor(initializingProperties?: Object) Creates a **LocalStorage** instance and initializes it using the attributes and values returned by **Object.keys(initializingProperties)**. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | ---------------------- | ------ | ---- | ---------------------------------------- | | initializingProperties | Object | No | Attributes and values used to initialize the **LocalStorage** instance. The value cannot be **undefined**.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); ``` ### getShared10+ static getShared(): LocalStorage Obtains the **LocalStorage** instance shared by the current stage. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Model restriction**: This API can be used only in the stage model. **Return value** | Type | Description | | ------------------------------ | ----------------- | | [LocalStorage](#localstorage9) | **LocalStorage** instance.| **Example** For details about how to use **getShared**, see [Sharing a LocalStorage Instance from UIAbility to One or More Pages](../../../quick-start/arkts-localstorage.md#example-of-sharing-a-localstorage-instance-from-uiability-to-one-or-more-pages). ### has9+ has(propName: string): boolean Checks whether the attribute with the specified attribute name exists in LocalStorage. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ------------------ | | propName | string | Yes | Attribute name in LocalStorage.| **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **true** if the attribute with the specified attribute name exists in LocalStorage; returns **false** otherwise.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); storage.has('PropA'); // true ``` ### get9+ get<T>(propName: string): T | undefined Obtains the attribute with the specified attribute name in LocalStorage. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ------------------ | | propName | string | Yes | Attribute name in LocalStorage.| **Return value** | Type | Description | | ------------------------ | ------------------------------------------------------------ | | T \| undefined | Returns the attribute with the specified attribute name in LocalStorage; returns **undefined** if the attribute does not exist.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let value: number = storage.get('PropA') as number; // 47 ``` ### set9+ set<T>(propName: string, newValue: T): boolean Sets a value for the attribute with the specified attribute name in LocalStorage. If the value of **newValue** is the same as the value of the attribute with the specified attribute name, that is, no value needs to be assigned, the state variable will not instruct the UI to update the value of attribute. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ----------------------- | | propName | string | Yes | Attribute name in LocalStorage. | | newValue | T | Yes | Attribute value, which cannot be **undefined** or **null**.| **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **true** if the operation is successful; return **false** if the attribute with the specified attribute name does not exist in LocalStorage, or the value to set is **undefined** or **null**. | **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let res: boolean = storage.set('PropA', 47); // true let res1: boolean = storage.set('PropB', 47); // false ``` ### setOrCreate9+ setOrCreate<T>(propName: string, newValue: T): boolean Sets a new value for the attribute with the specified attribute name in LocalStorage or, if the attribute does not exist, creates one with the specified attribute name and the set value. If the new value is the same as the existing value of the attribute with the specified attribute name, the state variable will not instruct the UI to update the value of the attribute. This **setOrCreate** method creates only one LocalStorage key-value pair. To create multiple key-value pairs, call this method multiple times. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ----------------------- | | propName | string | Yes | Attribute name in LocalStorage. | | newValue | T | Yes | Attribute value, which cannot be **undefined** or **null**.| **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **false** if **newValue** is set to **undefined** or **null**.
Updates the target attribute with the new value and returns **true** if the attribute exists in LocalStorage.
Creates an attribute with the specified attribute name and default value if the attribute does not exist in LocalStorage.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let res: boolean = storage.setOrCreate('PropA', 121); // true let res1: boolean = storage.setOrCreate('PropB', 111); // true let res2: boolean = storage.setOrCreate('PropB', null); // false ``` ### link9+ link<T>(propName: string): SubscribedAbstractProperty<T> Establishes two-way data binding with the given attribute in this **LocalStorage** instance. If the given attribute exists, the two-way bound data of the attribute in LocalStorage is returned. Any update of the data is synchronized back to LocalStorage, which then synchronizes the update to all data and custom components bound to the attribute. If the given attribute does not exist in LocalStorage, **undefined** is returned. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ------------------ | | propName | string | Yes | Attribute name in LocalStorage.| **Return value** | Type | Description | | ----------------------------------- | ------------------------------------------------------------ | | SubscribedAbstractProperty<T> | Returns the **SubscribedAbstractProperty<T>** instance if the given attribute exists in LocalStorage; returns undefined otherwise.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let linkToPropA1: SubscribedAbstractProperty = storage.link('PropA'); let linkToPropA2: SubscribedAbstractProperty = storage.link('PropA'); // linkToPropA2.get() == 47 linkToPropA1.set(48); // Two-way synchronization: linkToPropA1.get() == linkToPropA2.get() == 48 ``` ### setAndLink9+ setAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T> Works in a way similar to the **link** API. If the given attribute exists in LocalStorage, the two-way bound data of the attribute in AppStorage is returned. If the given attribute does not exist, it is created and initialized with **defaultValue** in LocalStorage, and two-way bound data is returned. The value of **defaultValue** must be of the T type and cannot be **undefined** or **null**. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | ------ | ---- | ------------------------------------------------------------ | | propName | string | Yes | Attribute name in LocalStorage. | | defaultValue | T | Yes | Default value used to initialize the attribute with the specified attribute name in LocalStorage. The value cannot be **undefined** or **null**.| **Return value** | Type | Description | | ----------------------------------- | ------------------------------------------------------------ | | SubscribedAbstractProperty<T> | Instance of **SubscribedAbstractProperty<T>** and two-way bound data of the given attribute in LocalStorage.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let link1: SubscribedAbstractProperty = storage.setAndLink('PropB', 49); // Create PropB 49 let link2: SubscribedAbstractProperty = storage.setAndLink('PropA', 50); // PropA exists, remains 47 ``` ### prop9+ prop<S>(propName: string): SubscribedAbstractProperty<S> Establishes one-way data binding with the given attribute in this **LocalStorage** instance. If the given attribute exists, the one-way bound data of the attribute in LocalStorage is returned. If the given attribute does not exist in LocalStorage, **undefined** is returned. Updates of the one-way bound data are not synchronized back to LocalStorage. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ------------------ | | propName | string | Yes | Attribute name in LocalStorage.| **Return value** | Type | Description | | ----------------------------------- | ------------------------------------------------------------ | | SubscribedAbstractProperty<S> | Returns the **SubscribedAbstractProperty<S>** instance if the given attribute exists in LocalStorage; returns **undefined** otherwise.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let prop1: SubscribedAbstractProperty = storage.prop('PropA'); let prop2: SubscribedAbstractProperty = storage.prop('PropA'); prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47 ``` ### setAndProp9+ setAndProp<S>(propName: string, defaultValue: S): SubscribedAbstractProperty<S> Works in a way similar to the **prop** API. If the given attribute exists in LocalStorage, the one-way bound data of the attribute in LocalStorage is returned. If the given attribute does not exist, it is created and initialized with **defaultValue** in LocalStorage, and one-way bound data is returned. The value of **defaultValue** must be of the S type and cannot be **undefined** or **null**. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | ------ | ---- | ------------------------------------------------------------ | | propName | string | Yes | Attribute name in LocalStorage. | | defaultValue | S | Yes | Default value used to initialize the attribute with the specified attribute name in LocalStorage. The value cannot be **undefined** or **null**.| **Return value** | Type | Description | | ----------------------------------- | ------------------------------------------------------------ | | SubscribedAbstractProperty<S> | Instance of **SubscribedAbstractProperty<S>** and one-way bound data of the given attribute in LocalStorage.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let prop: SubscribedAbstractProperty = storage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49 ``` ### delete9+ delete(propName: string): boolean Deletes the attribute with the specified attribute name from LocalStorage under the prerequisite that the attribute does not have a subscriber. If there is a subscriber, **false** is returned. If the deletion is successful, **true** is returned. The subscribers of the attribute are attributes with the same name bound to APIs such as **link** and **prop**, and **\@StorageLink('propName')** and **\@StorageProp('propName')**. This means that if **@StorageLink('propName')** and **@StorageProp('propName')** are used in a custom component or if there is still a **SubscribedAbstractProperty** instance in sync with the attribute, the attribute cannot be deleted from LocalStorage. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | -------- | ------ | ---- | ------------------ | | propName | string | Yes | Attribute name in LocalStorage.| **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **true** if the operation is successful; returns **false** otherwise.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); storage.link('PropA'); let res: boolean = storage.delete('PropA'); // false, PropA still has a subscriber let res1: boolean = storage.delete('PropB'); // false, PropB is not in storage storage.setOrCreate('PropB', 48); let res2: boolean = storage.delete('PropB'); // true, PropB is deleted from storage successfully ``` ### keys9+ keys(): IterableIterator<string> Obtains all attribute names in LocalStorage. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------------------------------ | -------------------- | | IterableIterator<string> | All attribute names in LocalStorage.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let keys: IterableIterator = storage.keys(); ``` ### size9+ size(): number Obtains the number of attributes in LocalStorage. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------ | ---------------------------- | | number | Number of attributes in LocalStorage.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let res: number = storage.size(); // 1 ``` ### clear9+ clear(): boolean Deletes all attributes from LocalStorage under the prerequisite that none of the attributes has a subscriber. If any of the attributes has a subscriber, this API does not take effect and **false** is returned. If the deletion is successful, **true** is returned. For details about the subscriber, see [delete](#delete9). > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **true** if the operation is successful; returns **false** otherwise.| **Example** ```ts let para: Record = { 'PropA': 47 }; let storage: LocalStorage = new LocalStorage(para); let res: boolean = storage.clear(); // true, there are no subscribers ``` ### GetShared(deprecated) static GetShared(): LocalStorage Obtains the **LocalStorage** instance shared by the current stage. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. > > This API is deprecated since API version 10. You are advised to use [getShared10+](#getshared10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Model restriction**: This API can be used only in the stage model. **Return value** | Type | Description | | ------------------------------ | ----------------- | | [LocalStorage](#localstorage9) | **LocalStorage** instance.| **Example** ```ts let storage: LocalStorage = LocalStorage.GetShared(); ``` ## SubscribedAbstractProperty ### get9+ abstract get(): T Obtains attribute data synchronized from AppStorage or LocalStorage. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ---- | ------------------------------- | | T | Attribute data synchronized from AppStorage or LocalStorage.| **Example** ```ts AppStorage.setOrCreate('PropA', 47); let prop1: SubscribedAbstractProperty = AppStorage.prop('PropA'); prop1.get(); // prop1.get()=47 ``` ### set9+ abstract set(newValue: T): void Sets the attribute data synchronized from AppStorage or LocalStorage. The value of **newValue** must be of the T type and cannot be **undefined** or **null**. > **NOTE** > > This API can be used in ArkTS widgets since API version 9. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type| Mandatory| Description | | -------- | ---- | ---- | ------------------------------------- | | newValue | T | Yes | Data to set. The value cannot be **undefined** or **null**.| **Example** ```ts AppStorage.setOrCreate('PropA', 47); let prop1: SubscribedAbstractProperty = AppStorage.prop('PropA'); prop1.set(1); // prop1.get()=1 ``` ### aboutToBeDeleted10+ abstract aboutToBeDeleted(): void Cancels one-way or two-way synchronization between the **SubscribedAbstractProperty** instance and AppStorage or LocalStorage, and invalidates the instance. After this API is called, the **SubscribedAbstractProperty** instance cannot be used to call the setter or getter. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Example** ```ts AppStorage.setOrCreate('PropA', 47); let link = AppStorage.setAndLink('PropB', 49); // PropA -> 47, PropB -> 49 link.aboutToBeDeleted(); ``` ## PersistentStorage For details about how to use PersistentStorage on the UI, see [PersistentStorage: Application State Persistence](../../../quick-start/arkts-persiststorage.md). ### PersistPropsOptions **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | ------------------------------------- | ---- | ------------------------------------------------------------ | | key | string | Yes | Attribute name. | | defaultValue | number \| string \| boolean \| Object | Yes | Default value used to initialize the created attribute when the corresponding attribute is not found in PersistentStorage and AppStorage. The value cannot be **undefined** or **null**.| ### persistProp10+ static persistProp<T>(key: string, defaultValue: T): void Persists the attribute with the specified key in AppStorage to a file. This API is usually called before access to AppStorage. The sequence of determining the type and value of an attribute is as follows: 1. If the PersistentStorage file contains the attribute with the specified key, an attribute with the key as the name is created in AppStorage and initialized with the attribute of the key found in PersistentStorage. 2. If the attribute with the specified key is not found in the PersistentStorage file, AppStorage is searched for the attribute corresponding to the key. If the matching attribute is found, it is persisted. 3. If no matching attribute is found in AppStorage, it is created in AppStorage, initialized with the value of **defaultValue**, and persisted. According to the preceding initialization process, if AppStorage contains the matching attribute, the value of this attribute is used to overwrite the value in the PersistentStorage file. Because AppStorage stores data in the memory, the attribute value becomes nonpersistent. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | ------ | ---- | ------------------------------------------------------------ | | key | string | Yes | Attribute name. | | defaultValue | T | Yes | Default value used to initialize the created attribute. The value cannot be **undefined** or **null**.| **Example** For details about how to use persistProp, see [Accessing PersistentStorage Initialized Attribute from AppStorage](../../../quick-start/arkts-persiststorage.md#accessing-persistentstorage-initialized-attribute-from-appstorage). ### deleteProp10+ static deleteProp(key: string): void Performs the reverse operation of **persistProp**. Specifically, this API deletes the attribute corresponding to the specified key from PersistentStorage. Subsequent AppStorage operations do not affect data in PersistentStorage. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | ---- | ------ | ---- | ----------------------- | | key | string | Yes | Attribute name in PersistentStorage.| **Example** ```ts PersistentStorage.deleteProp('highScore'); ``` ### persistProps10+ static persistProps(props: PersistPropsOptions[]): void Works in a way similar to the **persistProp** API, with the difference that it allows for persistence in batches and is therefore ideal for initialization during application startup. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | ---------- | ---------------------------------------- | ---- | ---------------------------------------- | | props | [PersistPropsOptions](#persistpropsoptions)[] | Yes| Array of persistent attributes.| **Example** ```ts PersistentStorage.persistProps([{ key: 'highScore', defaultValue: '0' }, { key: 'wightScore', defaultValue: '1' }]); ``` ### keys10+ static keys(): Array<string> Obtains an array of keys for all persistent attributes. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------------------- | ---------------------------------- | | Array<string> | Array of keys of all persistent attributes.| **Example** ```ts let keys: Array = PersistentStorage.keys(); ``` ### PersistProp(deprecated) static PersistProp<T>(key: string, defaultValue: T): void Persists the attribute with the specified key in AppStorage to a file. This API is usually called before access to AppStorage. The sequence of determining the type and value of an attribute is as follows: 1. If the PersistentStorage file contains the attribute with the specified key, an attribute with the key as the name is created in AppStorage and initialized with the attribute of the key found in PersistentStorage. 2. If the attribute with the specified key is not found in the PersistentStorage file, AppStorage is searched for the attribute corresponding to the key. If the matching attribute is found, it is persisted. 3. If no matching attribute is found in AppStorage, it is created in AppStorage, initialized with the value of **defaultValue**, and persisted. According to the preceding initialization process, if AppStorage contains the matching attribute, the value of this attribute is used to overwrite the value in the PersistentStorage file. Because AppStorage stores data in the memory, the attribute value becomes nonpersistent. > **NOTE** > > This API is deprecated since API version 10. You are advised to use [persistProp10+](#persistprop10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | ------ | ---- | ------------------------------------------------------------ | | key | string | Yes | Attribute name. | | defaultValue | T | Yes | Default value used to initialize the created attribute. The value cannot be **undefined** or **null**.| **Example** ```ts PersistentStorage.PersistProp('highScore', '0'); ``` ### DeleteProp(deprecated) static DeleteProp(key: string): void Performs the reverse operation of **PersistProp**. Specifically, this API deletes the attribute corresponding to the specified key from PersistentStorage. Subsequent AppStorage operations do not affect data in PersistentStorage. > **NOTE** > > This API is deprecated since API version 10. You are advised to use [deleteProp10+](#deleteprop10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory | Description | | ---- | ------ | ---- | ----------------------- | | key | string | Yes | Attribute name in PersistentStorage.| **Example** ```ts PersistentStorage.DeleteProp('highScore'); ``` ### PersistProps(deprecated) static PersistProps(properties: {key: string, defaultValue: any;}[]): void Works in a way similar to the **PersistProp** API, with the difference that it allows for persistence in batches and is therefore ideal for initialization during application startup. > **NOTE** > > This API is deprecated since API version 10. You are advised to use [persistProps10+](#persistprops10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ---------- | ---------------------------------- | ---- | ------------------------------------------------------------ | | properties | {key: string, defaultValue: any}[] | Yes | Array of attributes to persist.
**key**: attribute name.
**defaultValue**: default value. The rules are the same as those of **PersistProp**.| **Example** ```ts PersistentStorage.PersistProps([{ key: 'highScore', defaultValue: '0' }, { key: 'wightScore', defaultValue: '1' }]); ``` ### Keys(deprecated) static Keys(): Array<string> Obtains an array of keys for all persistent attributes. > **NOTE** > > This API is deprecated since API version 10. You are advised to use [keys10+](#keys10-1) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------------------- | ---------------------------------- | | Array<string> | Array of keys of all persistent attributes.| **Example** ```ts let keys: Array = PersistentStorage.Keys(); ``` ## Environment For details about how to use Environment, see [Environment: Device Environment Query](../../../quick-start/arkts-environment.md). ### EnvPropsOptions **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name | Type | Mandatory| Description | | ------------ | --------------------------- | ---- | ------------------------------------------------------------ | | key | string | Yes | Environment variable name. For details about the value range, see [Built-in Environment Variables](#built-in-environment-variables).| | defaultValue | number \| string \| boolean | Yes | Default value used if the value of the environment variable key is not found in AppStorage.| ### envProp10+ static envProp<S>(key: string, value: S): boolean Saves the built-in environment variable key in environment to AppStorage. If the value of the environment variable key is not found in AppStorage, the default value is used. If the value is successfully saved, **true** is returned. If the value of the environment variable key is found in AppStorage, **false** is returned. You are advised to call this API when the application is started. It is incorrect to use AppStorage to read environment variables without invoking **envProp** first. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name| Type | Mandatory| Description | | ------ | ------ | ---- | ------------------------------------------------------------ | | key | string | Yes | Environment variable name. For details about the value range, see [Built-in Environment Variables](#built-in-environment-variables).| | value | S | Yes | Default value used if the value of the environment variable key is not found in AppStorage.| **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **false** if the attribute corresponding to the key exists in AppStorage; creates an attribute with the key and the default value and returns **true** otherwise.| **Example** For details about how to use **envProp**, see [Accessing Environment Parameters from UI](../../../quick-start/arkts-environment.md#accessing-environment-parameters-from-ui). ### envProps10+ static envProps(props: EnvPropsOptions[]): void Works in a way similar to the [envProp](#envprop10) API, with the difference that it allows for initialization of multiple attributes in batches. You are advised to call this API during application startup to save system environment variables to AppStorage in batches. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name| Type | Mandatory| Description | | ------ | --------------------------------------------- | ---- | ------------------------------------ | | props | [EnvPropsOptions](#envpropsoptions)[] | Yes | Array of key-value pairs consisting of system environment variables and default values.| **Example** ```ts Environment.envProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { key: 'languageCode', defaultValue: 'en' }, { key: 'prop', defaultValue: 'hhhh' }]); ``` ### keys10+ static keys(): Array<string> Array of keys of environment variables. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------------------- | ----------- | | Array<string> | Returns an array of associated system attributes.| **Example** ```ts Environment.envProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { key: 'languageCode', defaultValue: 'en' }, { key: 'prop', defaultValue: 'hhhh' }]); let keys: Array = Environment.keys(); // accessibilityEnabled, languageCode, prop ``` ### EnvProp(deprecated) static EnvProp<S>(key: string, value: S): boolean Saves the built-in environment variable key in environment to AppStorage. If the value of the environment variable key is not found in AppStorage, the default value is used. If the value is successfully saved, **true** is returned. If the value of the environment variable key is found in AppStorage, **false** is returned. You are advised to call this API when the application is started. It is incorrect to use AppStorage to read environment variables without invoking **EnvProp** first. > **NOTE** > > This API is deprecated since API version 10. You are advised to use [envProp10+](#envprop10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name| Type | Mandatory| Description | | ------ | ------ | ---- | ------------------------------------------------------------ | | key | string | Yes | Environment variable name. For details about the value range, see [Built-in Environment Variables](#built-in-environment-variables).| | value | S | Yes | Default value used if the value of the environment variable key is not found in AppStorage.| **Return value** | Type | Description | | ------- | ------------------------------------------------------------ | | boolean | Returns **false** if the attribute corresponding to the key exists in AppStorage; creates an attribute with the key and the default value and returns **true** otherwise.| **Example** ```ts Environment.EnvProp('accessibilityEnabled', 'default'); ``` ### EnvProps(deprecated) static EnvProps(props: {key: string; defaultValue: any;}[]): void Works in a way similar to the [EnvProp](#envpropdeprecated) API, with the difference that it allows for initialization of multiple attributes in batches. You are advised to call this API during application startup to save system environment variables to AppStorage in batches. > **NOTE** > > This API is deprecated since API version 10. You are advised to use [envProps10+](#envprops10) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Parameters** | Name| Type | Mandatory| Description | | ------ | ------------------------------------------------- | ---- | ------------------------------------ | | props | {key: string, defaultValue: any}[] | Yes | Array of key-value pairs consisting of system environment variables and default values.| **Example** ```ts Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { key: 'languageCode', defaultValue: 'en' }, { key: 'prop', defaultValue: 'hhhh' }]); ``` ### Keys(deprecated) static Keys(): Array<string> Array of keys of environment variables. > **NOTE** > > This API is deprecated since API version 10. You are advised to use [keys10+](#keys10-2) instead. **System capability**: SystemCapability.ArkUI.ArkUI.Full **Return value** | Type | Description | | ------------------- | ----------- | | Array<string> | Returns an array of associated system attributes.| **Example** ```ts Environment.EnvProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, { key: 'languageCode', defaultValue: 'en' }, { key: 'prop', defaultValue: 'hhhh' }]); let keys: Array = Environment.Keys(); // accessibilityEnabled, languageCode, prop ``` ## Built-in Environment Variables | key | Type | Description | | -------------------- | --------------- | ------------------------------------------------------------ | | accessibilityEnabled | string | Whether to enable accessibility. If there is no value of **accessibilityEnabled** in the environment variables, the default value passed through APIs such as **envProp** and **envProps** is added to AppStorage.| | colorMode | ColorMode | Color mode. The options are as follows:
- **ColorMode.LIGHT**: light mode.
- **ColorMode.DARK**: dark mode.| | fontScale | number | Font scale. | | fontWeightScale | number | Font weight scale. | | layoutDirection | LayoutDirection | Layout direction. The options are as follows:
- **LayoutDirection.LTR**: from left to right.
- **LayoutDirection.RTL**: from right to left.| | languageCode | string | Current system language. The value is in lowercase, for example, **zh**. |