前4篇括丁,囫圇吞棗,看了整體控制邏輯枪萄,大體頁(yè)面封裝隐岛。
回頭繼續(xù)學(xué)習(xí),里面的知識(shí)瓷翻。
定義封裝 BackPressHandler
currentOnBackPressed
Safely update the current
onBack
lambda when a new one is provided
安全更新onBack狀態(tài)的lambda聚凹,當(dāng)新的狀態(tài)過來的時(shí)候Remember in Composition a back callback that calls the
onBackPressed
lambda
記住在 Composition 中調(diào)用onBackPressed
lambda 的返回回調(diào)
backDispatcher
每當(dāng)有新的調(diào)度設(shè)置回調(diào),當(dāng)效果離開 Composition 或者有新的調(diào)度器時(shí),移除回調(diào)
整體結(jié)構(gòu)和組件的控制
這里我們看到齐帚,在Theme中對(duì)主題的封裝妒牙,Components是頁(yè)面架構(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è)面預(yù)覽
Profile.kt
ProfileScreen 具體實(shí)現(xiàn)封裝
大概長(zhǎng)這個(gè)樣子陪汽,具體細(xì)節(jié)可以去讀代碼。
關(guān)于conversation 下一篇講解和總結(jié)褥蚯≈吭基本上Jetchat解讀就結(jié)束了。實(shí)在太累了赞庶,下一篇見