系列文章目录
1.HarmonyOS | 状态管理(一) | @State装饰器
2.HarmonyOS | 状态管理(二) | @Prop装饰器
3.HarmonyOS | 状态管理(三) | @Link装饰器
4.HarmonyOS | 状态管理(四) | @Provide和@Consume装饰器
5.HarmonyOS | 状态管理(五) | @Observed装饰器和@ObjectLink装饰器
6.HarmonyOS | 状态管理(六) | LocalStorage(页面级UI状态存储)
7.HarmonyOS | 状态管理(七) | AppStorage(应用级UI状态存储)
8.HarmonyOS | 状态管理(八) | PersistentStorage(持久化存储UI状态)
个人博客主页 : 谭祖爱 & 技术博客
项目实例地址 : RecordHarmonyOSProject
文章目录
- 系列文章目录
- 前言
- 一、Environment是什么?
- 二、Environment使用场景
- 1.从UI中访问Environment参数
- 2.应用逻辑使用Environment
- 3.从UI中访问Environment参数(应用主题颜色)
- 三、总结
前言
上一篇我们讲到了 持久化存储UI状态 (PersistentStorage),这篇文章我们讲解 设备环境查询 (Environment)
Environment_28">一、Environment是什么?
开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到Environment设备环境查询。
Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用程序运行状态的属性。Environment的所有属性都是不可变的(即应用不可写入),所有的属性都是简单类型。
Environment_33">二、Environment使用场景
Environment_34">1.从UI中访问Environment参数
– 使用Environment.EnvProp将设备运行的环境变量存入AppStorage中:
// 将设备的语言code存入AppStorage,默认值为en
Environment.EnvProp('languageCode', 'en');
– 可以使用@StorageProp链接到Component中:
@StorageProp('languageCode') lang : string = 'en';
设备环境到Component的更新链:Environment --> AppStorage --> Component
注:@StorageProp关联的环境参数可以在本地更改,但不能同步回AppStorage中,因为应用对环境变量参数是不可写的,只能在Environment中查询。
// 将设备languageCode存入AppStorage中
Environment.EnvProp('languageCode', 'en');
@Entry
@Component
struct Index {
@StorageProp('languageCode') languageCode: string = 'en';
build() {
Row() {
Column() {
// 输出当前设备的languageCode
Text(this.languageCode)
}
}
}
}
Environment_71">2.应用逻辑使用Environment
// 使用Environment.EnvProp将设备运行languageCode存入AppStorage中;
Environment.EnvProp('languageCode', 'en');
// 从AppStorage获取单向绑定的languageCode的变量
const lang: SubscribedAbstractProperty<string> = AppStorage.Prop('languageCode');
if (lang.get() === 'zh') {
console.info('你好');
} else {
console.info('Hello!');
}
Environment_85">3.从UI中访问Environment参数(应用主题颜色)
// 将设备的色彩模型code存入AppStorage,默认值为ColorMode.LIGHT
Environment.EnvProp('colorMode',ColorMode.LIGHT)
@Entry
@Component
struct EnvironmentPage {
@StorageProp('colorMode') colorMode:number = ColorMode.LIGHT
build() {
Row() {
Column() {
// 输出当前设备的colorMode
if(this.colorMode.toString() === "0"){
Text('浅色')
}else {
Text('深色')
}
}
}
}
}
三、总结
- 通过 Environment.EnvProp 写入环境参数
- 通过 @StorageProp 链接到 Component 中
- 通过 SubscribedAbstractProperty<类型> = AppStorage.Prop(‘参数’) 声明 常量 ,通过
常量.get()
获取相应 环境变量值