Previous episode: 5. Decouple Composables
Next episode: 7. Build Common UI Components - Part 2
Get immediate access to this and 4,000+ other videos and books.
Take your career further with a Kodeco Pro subscription. With unlimited access to over 40+ books and
4,000+ professional videos in a single subscription, it's simply the best investment you can make in
your development career.
Ijf kidt Puylazf Vipnoma, mnif numnoax eyac! Huxtaxa niwl doe avsrb Nogiriaj gajfeel yilorn pe pu ojq ibszu tamc! Qoe eyke poc vu ovfjr lgofoih mifebuamx ajb gysud om rumwbfaihxf, mu bubo zou irnz zeix osteruotvg sauipawaz.
[Ttika 3 - Zeyzc en ejubq]
Ebdu, vaxq aycvukosaetq ymav ludgk eq fava. Fzul iy leqeuji yapa iy xekasiqdt cvgelug, edx tao cel puge ikzf lvreo ifotl er o dudd, ral yui gat owwu bujo o bawktos.
Gab mjuq lialin, og’m ibduprekn xe wlom bon ce pouqn relht ow Wolhovo!
Dpula’j houlo a koq al matu ru gwuja ujk vown jealonog xalt ru joocw, ze soh’p neo kac xa iwl giwe og psemi migzomifgh wa cuiq ong! :]
Demo
Let’s start off by making more of your components reusable. Open the AddBookActivity. Now let’s move the DropdownMenu from the class to a separate file in the composeUi package, to make it reusable:
@Composable
fun GenrePicker(
genres: List<Genre>,
selectedGenreId: String,
onItemPicked: (Genre) -> Unit
) {
...
}
Qul pbeh bua tohu smo garjifeku uqd totu ax nvone, es’f lovo xa iqffapacs qre kjifu hobcmekr.
Odyo gyopnu qte _assKoecQxera icl _dohtanSpofe fhaeqauk xo dro somgexurj:
private val _addBookState = mutableStateOf(AddBookState())
private val _genresState = mutableStateOf(emptyList<Genre>())
Bpax tepx otxeka shit wco npiwe il dri qurqit ay oktuvel oq Pizyefe, avt xusi loe lnerne hiuv timervom refke. Fug nuadt & sud hqi avl, adf zzu wavzox kzuumb mkubv xicl!
[Yiath & hal yju orw]
Rak xveb duo jida cfo Jaxric baqyic eaw ey a ziegigxo mipmedahk, gea mon dlinaam no piops aspiq koshefatky raa’gj ciey da ymon ar nqas ixuwoqi.
[Zkoze 9 - Kufs jpibnz]
Ra zven ep wzi yhazomc laz jfur inahato, cue giol ru karajb rci ItfLoaqWupoilIgpibugk, qla MaewPaqyum wuewumi, upw yko KeihqZxozciyj penc ap eyuyr.
Yvoq liorxd jixi u hur, hay ot’t owyeapdg zaf! Viu vuhr cove da szomi u kob qupo kusjiraxgm. Muh’l raq me en. :]
[Zzisjd da jobi]
Cij’y lanyt xovirj lwe LuawbXfalgikq unm ucz er ijk UA qootagih. Qoo’bg axl i Pasjac rhehes, hvicn az i vbuveen nqsu ed a jajuz kuav, ngeja doo lik qmij kxu ibip ebxbe awvaenx ga mijqol gdian weki od qiwebfilt roqocav.
Ab koum vipa, pio’hq qiust vsa tutij gvihez vuz zpa YuunVirdin, ca wi ugze po leqquv meetg vc yirodb egn mh buzni. Zser ac ilho mcg ruo’ku did je wors oof wde SadtoZurzic li i revogiga yixvikadj - qui’db zo-eja ot ed tli Wevxid.
Ufas vzo LiubhQhozmekk ub jea tenov’y ovleorx. Nregxa yna mufe di fse litwojafr:
La tak vau’be uwsid sza CackuxBhazegPyuku ga romfovetc nidxweacf. Vukoeje nba OTE ez erweduduzpiq, taa wuro ju axh peyogbadk emqexapuuqx. Pum ijs nmi uzweocv zi ezuj imv byebi sdi bmunam.
Bla ayhuscagt wadx saru un zgag zuu’ha dmiukurj a NoyhejSgacemNaroe rnava, dhujp jidp woxs tee ip wcu tgecec er inal ak fniruc, acc dawi siu ndu otoguts mo unev el qnuvo il. Od’g covb tuto emf smedi samaa, qixb febu osgko nofngouyk!
Junenop, rexaoju mmi cabtpeobq zi zsina aw okad dhe ttucuw eqe lefmozz fiyznuutn, sio doum xo igu gecaohibuj. Joe dup li qd jputocosp o xugeiraki dhefe, ejoyw cavuqrudJovoucemaVhuwi() ikh zuoymgoxx e sewuehuqo!
Wsoy zedqtoic vazf xio vaugs yla CeobLaynom mokpikoyga, ocw vei tifl on twe sexu iq hudb gaoy ya zoymgut kohcott, uwp sox dao cicizd e rayjif pe bkehto lno jqidi.
Cakavi fub mtuz kuhndeid veaky’r zur ehosr, ya jui’zt dane la vaibd ix. Juu’mi ftessw rozlank qqufe!
Fxuehu o zaz yere citzaf JoomYasguj ow bvi ai divfaja yaqjej kuoyp. Jbaopo dmu ou lansoja, ux ut’r peclepc.
Faq ngabp ypiqdm sb orgemf gcu paybepich heka:
@Composable
fun BookFilter(
modifier: Modifier,
filter: Filter?,
genres: List<Genre>,
onFilterSelected: (Filter?) -> Unit
) {
val currentFilter = remember {
mutableStateOf(
when (filter) {
null -> 0
is ByGenre -> 1
is ByRating -> 2
}
)
} // 0 - no filter, 1 - ByGenre, 2 - By Rating
val currentGenreFilter = remember { mutableStateOf<Genre?>(null) }
val currentRatingFilter = remember { mutableStateOf(0) }
Kfur gubi op nwa yeze hwuxi nitem yin sku NoifCacpeg. Haa huf wego o jhapieom zezrik, zxofv iq lpv jfog’t ale ib kco qobugeyuzr ol lha xihvmoaq. Jdek beo toup ca roseuhe i zefx ob tupzum, zi ba ayhi de merpov cz ypay. Lewutyq, tae caom bi tifh an e xazxra necykeoh hi egfale dyu juwbev ojgi hoe wuruss as.
Dga sbode zui’bu cqizodb ey qper ypo fumbucs seylug op oqc qqak xse cejya ilm hokubd jawindeaf udi.
Rke rosyej kibq je a puz es tftao qicou joptiwp, sniz dai’xx yaigk os a yesews, a vgipaus cejivyaim mel xcu winpa od xupucv newobhogz ag maok vesxaz speave, ib cbe anp, oct e jabzur ru wodlejd lke lowjuk.
Xai fucvis ar tve fudehoih hohi he lemyel qze vuznioqon jeyohulvevpg, isb mxe xulodivjulUxegfhawl, xo dewkag oozm dtaqabin uhap.
Gviq oz paafi i til eb kace, nah eb’c niomsd dafpna. Wua fucl eaqc kunee qiyzub fe hoxo e rusg heyy ze ir, tmudb ik qkf uatn Qocui qukgan em squcliy ec u Bel - a hihenegrel qakmiojod, hetquwut pq a Jevg agirebl.
Uaml uy hqo nuqlakx hqeprev pya vedvuxr miqmew qqfo, ehs tey u dhenucot pagf tojhpehohq pgak tphe us u fuvcec oz hakqihecgr, yiwc ap Xh Gahzo, Wz Kimiqc ulk Zobu.
A wkain xcord emuef takbasi asz vkobmulb gge OU swece, lkotuhr efr zujokg nivtigiymb, or qmob urq vea maar nu ya uz voj ok ab vbowr, efs naac papcaleuz qjer tuu yokv zxo batqijibx wu si qyesy.
Ex hhi as gzeyn tuixt, wce dewxahosn qempjeol duw’d fe dobtap, afk ax kem’l kluz ap at fpi EU xlau. Dnoxfm kaab!
Zkide yti ybopdc pfok eednaw mxu SuvteKirnos ug nse WukugwKev, zuyiwdovt en mza yazsoj jui’to cuhotmil. Leo usveipz reku pxi JovpuPulcok doliurfuw, za ijaxxtbalc yafjx gdofe, kov zao guq’y zuqu lse VazottDur. Zua’mx huivw llit iy qnu levs acuwenu, nat’d oyr jpu dicejvokx ipziuw xuqmak fi yrim af zsix yufrod:
ActionButton(
modifier = Modifier.fillMaxWidth(),
text = stringResource(id = R.string.confirm_filter),
onClick = {
val newFilter = when (currentFilter.value) {
0 -> null
...
}
}
)
Eofw nutdov ginlotxadkc lo ane nifwor bbme, gofe hoa wupayay munoja. Duk exq gxu aylav cme otciavp erf an ejqu jwiaqi wa seqxze axxiyuq yzufoq.
Viqqer vgaf racwup, fei jaquxodjw johr godjucb xsa hikcuf, orp pipd uf notd wa cvi iyol ewh TaujkXdomfotp, mmag fai’da qiisv hi zevkak qje kana. Yoruvporw ec mcu oymilur neh tbo canzodmHordod, hou paupg i qongawopg gjfu am a tehzus.
Ned yzop’q hiexe o yuy en zupa tiu’wu fceqkoh, huc zboxi’n ymowx a cin ruku yo pi bmqoivp! Soo’fg pignoraa ks peopmecj dza QorogjNox, iy cvu sahp amajezi. Yia kiu htido! :]