• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ArkUI子系统Changelog
2
3## cl.arkui.1 在字节码HAR中通过router.getState()获取的path内容变更
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11当开发者使用中间码HAR升级到字节码HAR时,通过router.getState()方法获取的path信息不正确。
12
13**变更影响**
14
15该变更为不兼容变更。
16
17此不兼容变更的前提是:源码HAR或者中间码HAR升级为字节码HAR时产生的不兼容。
18
19不兼容场景示例1:
20
21变更前:
22
23当开发者使用的是源码HAR时使用router.getState()方法获取的是**相对路径**。
24
25![pagePath](figures/pagePath2.PNG)
26
27通过router.getState()方法获取的path信息为"../../../../library/src/main/ets/components/"。
28
29当开发者把源码HAR升级为字节码HAR时,通过router.getState()方法获取的path信息为"/\_\_harDefaultPagePath\_\_",不能获取正确的name和path值。
30
31![pagePath](figures/pagePath3.PNG)
32
33变更后:
34
35当开发者把源码HAR升级为字节码HAR时使用router.getState()方法获取的是**绝对路径**。
36
37![pagePath](figures/pagePath1.PNG)
38
39通过router.getState()方法获取的path信息为"library/src/main/ets/components/"。
40
41不兼容场景示例2:
42
43变更前:
44
45当开发者使用的是中间码HAR时使用router.getState()方法获取的是**相对路径**。
46
47![pagePath](figures/pagePath.PNG)
48
49通过router.getState()方法获取的path信息为"../../../../ + 哈希值 + library/src/main/ets/components/"。
50
51当开发者把中间码HAR升级为字节码HAR时,通过router.getState()方法获取的path信息为"/\_\_harDefaultPagePath\_\_",不能获取正确的name和path值。
52
53![pagePath](figures/pagePath3.PNG)
54
55变更后:
56
57当开发者把中间码HAR升级为字节码HAR时使用router.getState()方法获取的是**绝对路径**。
58
59![pagePath](figures/pagePath1.PNG)
60
61通过router.getState()方法获取的path信息为"library/src/main/ets/components/"。
62
63**起始API Level**
64
65API 10
66
67**变更发生版本**
68
69从OpenHarmony SDK 5.0.0.49开始
70
71**变更的接口/组件**
72
73router.getState()
74
75**适配指导**
76
77当开发者在代码中有通过router.getState()使用path值时,需要根据获取到的内容进行整改。
78
79## cl.arkui.2 禁止在转场动画过程中,更新消失节点的属性。
80
81**访问级别**
82
83公开接口
84
85**变更原因**
86
87在转场动画过程中改变正在消失节点的属性,可能造成数据访问异常,产生crash。例如,动画过程中将data置为undefined,Text组件增加默认转场不会立即被删除,在更新状态时,数据访问异常产生crash。因此,需要变更为在转场动画过程中,禁止更新消失节点的属性。
88
89```
90class MyData {
91  str: string;
92  constructor(str: string) {
93    this.str = str;
94  }
95}
96@State data: MyData|undefined = new MyData("branch");
97if (this.data) {
98  // 对于删除时增加的默认转场,会延长组件生命周期。Text没有立即被删除,而是等转场动画结束后才被删除
99  Text(this.data.str)
100}
101Button("play with animation")
102  .onClick(()=>{
103    animateTo({},()=>{
104      if (this.data) {
105        // 在动画过程中,会给if下的第一层组件增加默认转场
106        this.data = undefined;
107      }
108    })
109  })
110
111```
112
113**变更影响**
114
115该变更为不兼容变更。
116
117变更前:转场动画过程中,正在消失的节点可以更新属性。
118
119变更后:转场动画过程中,禁止消失的节点更新属性。
120
121**起始API Level**
122
123API 10
124
125**变更发生版本**
126
127从OpenHarmony 5.0.0.49 版本开始。
128
129**变更的接口/组件**
130
131transition属性
132
133**适配指导**
134
135如果要对转场动画过程中,消失的节点进行属性更新,应当在节点下树之前产生,而不是在消失过程中。
136
137示例:
138
139```
140@Entry
141@Component
142struct Index {
143  @State flag: Boolean = true;
144  @State color: Color = Color.Red;
145  build() {
146    Column(){
147      if (this.flag) {
148        Text('abc')
149          .transition(TransitionEffect.OPACITY)
150          .backgroundColor(this.color)
151      }
152
153      Button("play with animation")
154        .onClick(()=>{
155          // 变更前,消失过程中的节点可以更新属性,Text组件的颜色在消失过程中变为蓝色
156          // animateTo({},()=>{
157          //   this.flag ? this.color = Color.Blue : this.color = Color.Red;
158          //   this.flag = !this.flag;
159          // })
160
161          // 变更后,消失过程中的节点无法更新属性,Text组件的颜色在消失过程中一直为红色
162          // 如果需要更新属性,使Text组件的颜色在消失过程中变为蓝色,应当在节点下树之前更新
163          animateTo({},()=>{
164            this.flag ? this.color = Color.Blue : this.color = Color.Red;
165          }) // 节点下树前改变颜色属性
166          animateTo({},()=>{
167            this.flag = !this.flag;
168          })
169        })
170        .width("100%")
171        .padding(10)
172    }
173  }
174}
175```
176
177## cl.arkui.3 Tabs组件barOverlap接口默认效果变更
178
179**访问级别**
180
181公开接口
182
183**变更原因**
184
185优化Tabs组件barOverlap属性设置为true时,TabBar的模糊效果和渲染性能。
186
187**变更影响**
188
189该变更为不兼容变更。
190
191变更前:设置barOverlap属性为true时,TabBar默认背景色修改为'#F2F1F3F5'并添加模糊效果。
192
193变更后:设置barOverlap属性为true时,TabBar默认模糊材质的BlurStyle值修改为'BlurStyle.COMPONENT_THICK'。
194
195| 变更前 | 变更后 |
196|------ |--------|
197|![barOverlap_after](figures/before_baroverlap.jpg)|![barOverlap_before](figures/after_baroverlap.jpg)|
198
199**起始API Level**
200
201API 10
202
203**变更发生版本**
204
205从OpenHarmony 5.0.0.49 版本开始。
206
207**变更的接口/组件**
208
209barOverlap接口
210
211**适配指导**
212
213当barOverlap设置为true时,开发者若期望无模糊效果,设置barBackgroundBlurStyle为BlurStyle.NONE。示例如下:
214
215```ts
216@Entry
217@Component
218struct barHeightTest {
219  @State arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
220  build() {
221    Column() {
222      Tabs({ barPosition: BarPosition.End }) {
223        TabContent() {
224          Column() {
225            List({ space: 10 }) {
226              ForEach(this.arr, (item: number) => {
227                ListItem() {
228                  Text("item" + item).width('80%').height(200).fontSize(16).textAlign(TextAlign.Center).backgroundColor('#fff8b81e')
229                }
230              }, (item: string) => item)
231            }.width('100%').height('100%')
232            .lanes(2).alignListItem(ListItemAlign.Center)
233          }.width('100%').height('100%')
234          .backgroundColor(Color.Pink)
235        }
236        .tabBar(new BottomTabBarStyle($r('sys.media.ohos_icon_mask_svg'), "测试0"))
237
238        TabContent() {
239          Column() {
240            List({ space: 10 }) {
241              ForEach(this.arr, (item: number) => {
242                ListItem() {
243                  Text("item" + item).width('80%').height(200).fontSize(16).textAlign(TextAlign.Center).backgroundColor('#fff8b81e')
244                }
245              }, (item: string) => item)
246            }.width('100%').height('100%')
247            .lanes(2).alignListItem(ListItemAlign.Center)
248          }.width('100%').height('100%')
249          .backgroundColor(Color.Blue)
250        }
251        .tabBar(new BottomTabBarStyle($r('sys.media.ohos_icon_mask_svg'), "测试1"))
252      }
253      .barOverlap(true)
254      .barBackgroundBlurStyle(BlurStyle.NONE) // 关闭TabBar模糊效果
255    }
256  }
257}
258```
259