前4篇,囫圇吞棗,看了整體控制邏輯,大體頁面封裝。
回頭繼續(xù)學(xué)習(xí),里面的知識(shí)。
定義封裝 BackPressHandler
currentOnBackPressed
Safely update the current
onBacklambda when a new one is provided
安全更新onBack狀態(tài)的lambda,當(dāng)新的狀態(tài)過來的時(shí)候Remember in Composition a back callback that calls the
onBackPressedlambda
記住在 Composition 中調(diào)用onBackPressedlambda 的返回回調(diào)
backDispatcher
每當(dāng)有新的調(diào)度設(shè)置回調(diào),當(dāng)效果離開 Composition 或者有新的調(diào)度器時(shí),移除回調(diào)
整體結(jié)構(gòu)和組件的控制
這里我們看到,在Theme中對(duì)主題的封裝,Components是頁面架構(gòu)組件的封裝。
Mock 數(shù)據(jù)的封裝
Demo 數(shù)據(jù)在data/FakeData.kt . 這里面封裝了界面所需要的靜態(tài)數(shù)據(jù)。Message列表數(shù)據(jù),UI State ---聊天UI的狀態(tài)。同事Profile數(shù)據(jù)的封裝,我自己的Profile數(shù)據(jù)封裝。
兩大業(yè)務(wù)模塊封裝,profile,conversation
- profile模塊
我們熟悉的viewmodel 封裝。在ProfileViewModel.kt 中我們學(xué)習(xí)到@Immutable的使用
不可變可用于將類標(biāo)記為生成不可變實(shí)例。 類的不變性未經(jīng)驗(yàn)證,并且是類型的承諾,即所有可公開訪問的屬性和字段在構(gòu)造實(shí)例后都不會(huì)更改。不可變通過組合的使用,可以用于組合優(yōu)化。從類型讀取的值不會(huì)發(fā)生變化。僅包含沒有自定義 getter 的 val 屬性的數(shù)據(jù)類可以安全地標(biāo)記為不可變的。
以上經(jīng)過查詢,對(duì)比Kotlin的不可變特性和數(shù)組等理解。認(rèn)定ProfileScreenState 不可變
ProfileViewModel 很簡(jiǎn)單,根據(jù)userId,返回LiveData 泛型ProfileScreenState。我自創(chuàng)就稱他為模板數(shù)據(jù)吧、
ProfileFragment 中,維護(hù)了兩個(gè)viewmodel,ProfileViewModel和MainViewModel 都是通過by的方式。 初始化的時(shí)候,我們看到inflat實(shí)例化ComposeView 實(shí)際就是ViewGroup(看源碼繼承關(guān)系)
Previews.kt 這個(gè)相當(dāng)于測(cè)試所見即所得的開發(fā),算是測(cè)試類,測(cè)試ProfileScreen組件,適配頁面預(yù)覽
Profile.kt ProfileScreen 具體實(shí)現(xiàn)封裝

大概長(zhǎng)這個(gè)樣子,具體細(xì)節(jié)可以去讀代碼。
關(guān)于conversation 下一篇講解和總結(jié)?;旧螶etchat解讀就結(jié)束了。實(shí)在太累了,下一篇見