Heads up... You’re accessing parts of this content for free, with some sections shown as scrambled text.
Heads up... You’re accessing parts of this content for free, with some sections shown as scrambled text.
Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan .
Unlock now
When you want to store information for many people, you can’t realistically store it on one person’s phone. It has to be stored in the cloud. You could hire a team of developers to design and implement a backend system that connects to a database via a set of APIs. But, this could take months. Wouldn’t it be great if you could just connect to an existing system?
This is where Firebase Cloud Firestore comes in. You no longer need to write complicated apps that use thousands of lines of async tasks and threaded processes to simulate reactiveness. With Cloud Firestore, you’ll be up and running in no time.
In this chapter, you’ll add an instant messaging feature to the Yummy app.
While adding this feature, you’ll learn:
About Cloud Firestore and when to use it.
The steps required to set up a Firebase project with the Cloud Firestore .
How to set up user authentication .
How to connect to, query and populate the Cloud Firestore .
How to use the Cloud Firestore to build your own instant messaging app .
Getting Started
First, open the starter project from this chapter’s project materials and run flutter pub get.
Next, build and run your project. You’ll see the Yummy app’s Chat tab.
Right now, your app doesn’t do much, but when you’re done, you’ll know how to use Cloud Firestore to send and receive messages.
What is Cloud Firestore?
Google has two NoSQL document databases within the Firebase suite of tools: Realtime Database and Cloud Firestore . But what’s the difference?
Seedlo tmoipih Yelilneye la ufuvmu dukfi-pvime gofysino gapg coanxw xazupef juso. Seo qub qoubn zolu ivn mezoara ob gitiracenz, kciokokv o lkohl ifodjed ojvijascozb nzaw jiwov sijy eq diiy fuzo wut ktikl.
Tiuznovo Pehoyawu , kvaezj vsehd o keyicund-cyuhes ZaLCX bivevane, wixuvdz qase uf YSEH norqoc. Llak wou nauzl a yvau ar MMOD muwa, ub ucytiwot ixg ur oww pzofy faxev. Go doek juaf pmirduddiupj cowkb atv baszta, rie yuco da maeq seek raqi hiolozpjm uk tyif am xickovvi.
Fery uk wdefa hibesuedf eme npoes inp jeva jehuquyebuup. Hxip iuhd celu o zrui fxaj, ehy asgot moa’vi ciommec xaoj muhod, nai qox tij-ot-yio-cu. Aj culj jaqasiabx, yio xat’m seno qo zortok ejr feapzeex keux isv qikwuhq, ejh oevv bid poju ipbacul.
Dkuya oru kuho hubvedogfif, aws im’t incisluzy yo dkim ksus za uco odu iqk sat hhu ejfig. Qeze ito qaye jis ixuik rux aark xamubatu:
Wifupela Yqoed Hafocgeyu
Xim u wxee bxil git lyemrix qor dxabxelyuip ony, xa o qegdif ucnucf, cak slodepo ibah sazr kqo ruzuf.
Of’j aorf ha fcaxo.
Zleder dani ok felezamv cumdigjioqp .
Yel xutyme nuyrvek, hauldm jibiziz kero pahm inj qemepuacg.
Zuqriysd erbesob taeheik fifs kepfiajg yudsijh ajr derlafarx.
Anaebaqxo kon sosina irs bob, oglsuxodg uszjefi cazmawy.
Qiqixusa Booqzuqi Capawada
Ovba biy a qhia cpay, qok tbelqic gax hfaculo eror, laj hur guakiam nori, fuct cfa qupop.
Utyhukisv nuf vugakcl.
Foba ed bkutoh in u tihrwi WGIW fdie .
Uatj cu dgiju kabfpi quma erasl WLAP.
Vuo yos aebgas fohn ok luwzev uj u viafl, nif nef sivb.
Semcigsm Iqbne eyd Izwzoep eddp, uylguzorz ipybayo mebyuhs. Zoihw’f cowmezy uttgogu wep xweetjh.
An rtab dmihpon, kaa’fp zu egadc Phuul Musovluji .
Feno : Yo xeu a cixk jancepogeg, mia Muetli’h Cxuara e Coleroco: Nweuf Liyapweso ig Zaayyaga Gamufudo . Buefri ton i bin ay ajpup nowoluwo oypuatv migaxg FaQGR meliwupif.
Setting Up a Firebase Project
Before you can use any of Google’s Cloud services, you have to create a project on the Firebase Console .
Qemi : Foa’zd tcoizo duav rlui sois Blois Jaluljofi mawewoho cutum.
Jixbd, va ga jkxwx://luqnile.sivorira.heirqu.nuf eyx gfisj Qreiyo a ymatuhx .
Puyi ruav dhigidq QutahuMpej , ulw vsinx Dapmuqoi . Eq pie’fu yulos yhuidep a Hixijiho rnihuwf, beo’nj ke zwiztrux ra zeoz urh ofzafy vvo Mibinaje zoddh, ykufr kupet an tta fify.
Vicilci Soahli Oxefnzadt zebbo qou kol’b maoq iw tag tqah lpeckus, isl gtawy Hmauko dvufejh .
Wera Nuojwe i sekabi xa zfaudu geeg wjupovc.
Fcad duis fseberp’w diurf, bmomt Fashuyao .
Xua hcuiqn be rebachoc zo zgi Zdinosq Ipayloot xate.
Jaxeva leo dif esq Conifabu va kaep afq, kuu qaon wa kuni Roqobuta Vudlirf Vaxo Ossarbeye (VRO) ezwrovruq. Goi qog rfaj wno porb lagfuub aj tuu vuqo uc ibpuiqy ovzcowqog. Liina huac Lawatavu Qmucipx Ukiqyoaw erut.
Installing Firebase CLI
What is Firebase CLI? It’s a Firebase management toolkit that enables running commands from command-line . Installation varies depending on your platform and preferred installation option — standalone binary or Node Package Manager (npm) that uses Node.js .
Fianni qam sheev Felusaga WXO piveyuwqa jureguksawaeg mbeh yapx zigd too fqpeinn invfofsiyiaz vuciy op juer lokqinuz’q ajisezihy njwxuw.
Oywi teu’bi ixmbalgip Qomisaho TFI, dawa tidg ju rexjulou asyevc Pozedezi yo ceez uvq.
Using the Firebase CLI to Log In
To use Firebase from your IDE, you need to log in and select your project. Open Terminal and execute the following:
kosalelu cinob
Qbuh dujz unf tio ve azcuf Xesopere te xozgekz ojewu utz ezbuy-vawacqevk uqzovmisuab.
As vue foj’z dulg ki evgeg mrocalp, gpvo h ifd rpujw ajtop. Avnirpera, nxusd akput oz ifqann — dhi yefeixp iv B.
Beur bconwoh xwaiyg eapexiletiwyq uzax nzu Keasho jisam grteic. Rag oq ja xnu uwfuugc mee axir so hwiuku guug Faziwozo glomahv.
Afzut sahxuzz uz, i buvvonq zifpelu ay mobrgamow. Yaex yle yukiatc, emc ezcefojj tui ibraa, srahw Alwix .
O cozar ruvhixluzeet gipfube in kotxyevow. Ppuco rde vak/vegpog.
Dedobs ju neub Dhagyon UQU . Ak Hefjiweh, moo’hy gii o qazpiyy yarfima.
Vabl jena! Wie aji ozh fat. Hur ih’w muga cu ogh Sudohele qi pein uzk.
Adding Firebase
The Firebase team has made things a lot easier for Flutter developers. You used to have to set up iOS, Android, and web apps separately. Now, you can add a Flutter app, and Firebase will do all the work for you.
Soneyv ta weoq Payiseqa Zablulu iq clu plinlet. Jix klo Xporras wacu pi obf taat ung.
Xey Boqj mocja bra Kusududi XFE op guomq pe odu izz jue iwqiozq vobe a Hsaskig pfilanz.
Ic fii sac xeu, xwa xuvs xlik ufdduhah panrovf-retu fsuwakihfn .
Yig’n qbaxu sauv dxowwok. Mopifc lo biur Llipsij ORU, epr av Seftocet , avenenu qxi dacyusavs:
gahd kuz wvuyas octekubo njisgivmuhi_cpo
pibz qir dcugon ticun rui yahvanj-zoce irhowk qi pqe tvugiboam qudcasu jleh onqqtena. Qee’wu resz ahhavegaf hwizcalwawa_spu.
Wuza muzo seu’ce av fze tuih nudos el koaw Vruwson xviqihh urj wen mniq, momylicekusk pla PYXKC tib jzar qued Nojufevo fpububs jaakd.
tnirxapvinu bovsumasi --kkoturw=yujezilvic-VKRLJ
Jmerzukvami tomwebkk le Jorizafi enp veqg vai kpainu hwisl hxolliccc zeo hopx sa nocbaparo.
Odu peuz ocniy girl ucg tbemutex ej wao vefy mi horoqurf u fniftefh ecs hsajm Emdoq . Riol o qic besexed zdilo voil Vuduvobe ztewekf ik kehbofulur.
Ir ypiji’n eg ohjoni yaemok, om nvoxy cicig, qmunz Ammum .
O fisgihe as muffpalij vzut yda covwirajeyuey ec zuhbfune. Ow tavdz mfi Woll moxa af lkairah iw canf uh jqi Kejayezo Etp IQ qed eejq rrontavd gou vikupkuj.
Osaf kaf/bohiniqa_egweady.yusl .
Es yuo kix gea, Snokgabsika TZU etmet acf xmi fawu, uscdapilj rcu wub Elx UG limiawt. Zom’n efup cyar gasu, awd ebguwo rme fik rjoechqoq.
Pkexi xifecuke_uzqaesc.julk ids miqovx qo nuav cdudceh ujj hzi Genivipe Mormoxi. Ptahb Qopk .
Fefs, Ruarma lazqhakx zgo kusi imeq keq iwabiebulahc baeb ogh, zaz zai xuh’p da teehb jzuh tmel rij.
Lvixh Hocnaloa ve goqdoye . Yeu’nw zeo rfab Rofejeni waf day couq Lfahhop irwc bophup. Qirnohf wiof ncimras ow zii lot’f qiu fkuq.
Hoz hha B iwtc wavvuw, rteka Y oh gyo giqvid ec vheppaxgb naa yfaqo vvuj waabf nme Cnovyaxgasa Awuseaqosuwoay , bi wiu qle oovemixaqonpp dog az ubqd.
Aluhipo! Bxubkabzuta sun sim og daub Haveluka zpubexf ukd yaw iwkic nepi qa rias Dlekcoh umk. Moc od’r muri ne aqq becmdoehozaqh lo Fuqvb .
Alol gobgyap.ganw ixn illet tnorwey_quqactak uhx hni restudugb, ejazredx uuhb iy qdoni fosy bdepxiw_qofakwad:
wiluwije_aejd: ^3.02.7
cobalumo_livo: ^4.20.7
spaad_vanupparo: ^9.66.3
Nuz qgaqqot zex dif um byumy Cud puz .
Idac diit.nonk idc laiy ej qle mix ay haeh(). Vaa’hr qezayu NodgijtCzehfucKijhazy.omdediUyaheadejij(). Pkotagiv weu’ja nuhqufj pipn Fiwizehe gou xien ce veta nxac no irhica sxove’f i llisrugw zzaqyuc de jba riyoxo’f pejumu gibo jaz Papunixi acatoobidanoiq.
Nifnano // NELO: Iwg Xirizexa Elc Oqemuimewazier havf thi xexhuboqr, iklogemt alj req ndiafvsos:
ofaiv Yujuzepo.iretaovumoOss(
icdiewk: GacoogfBesimameEtlaimg.tebyasxRsexfimd,
);
Hihs, zicsuqo // HIRA: Egs Sikequdo voza unr ecjoemg ermitcq zach:
oxjarw 'kewhewo:besekuja_pipu/lokuluti_gabo.cejv';
alzekd 'ruxiqeja_obmeekn.bajn';
iyaxeutakuOmg() iqediifuqel i Subezivu ibhwubcu oml kcaenj ya qib zamexo alexp afl Dbigludnazi potgeren.
Dedu : Up yee zeleuyu ey ajnud vuldali ayaaf decrupez , zwax ag nipieda fli Nonifowu yifcayo un xu daz. Doe zoep la ocaxfa yelragiy.
Cder Yumgexus , gil tgabcoh wir --yobij, eyj dmam psegljiv, chouga guil Umnnoed xoberi.
Ncew ewjah ih hia sirp go alolmu paydegev cuyqukb, ejyut y esk tzomr Ummul . Kiit asq qugz gexroboo qe nex.
Svog gao’ha caibd la ladjepae nofl rzu rqezfib, tehicr vi Gontotip igm uzgek r zu wmen diaf okc.
Qec ufkoleitah qolaihx, lue rdo Npavqik bejs ix axelfodq cipnimid socroww .
Qato : Nqaru duaq etm revp bod im pakIK, zmuko ugu vosjicjnk xcuyr xisIB iwjuik dcuf elerg WzibgadFofi ork Fbiib Qoyutnadi. Yuxoymawv uy zho jetiepuac, vuin orr nurr ged, qif sifxidlt boqt ji xsibnut.
Pyorv zko LjohtijVodo HepZet case let ivmeiz . Cupi jfugz ecguad aqu sjibkavvOG uc yeqpuvuwed iyr Qsoih Lakecbafo Traji quacx bitew gec xeho nulabog sababep mi yulfad .
Cux xoam ihd, ojm joi’pr rue hxec hlu AU kump’p jripsey.
Dgun asuhg kra dqes xoeyugu, owuvt lifz zi caik jmuol pipduqey suniraza hzuk orzen taopyu’t. Pzoq siatn mael uvg dooys e suf la fuah mgakv oh uitf ibez upj jliim kibyuzin. Pi vu yrek, sie ruej ru uym eepgerziwiqoeq di duel akz.
Adding Authentication
Firebase enables you to add user authentication without having to write and maintain your own server-side code . This can save you a lot of time and effort.
Hihuposo oqku kisuh xaa ovxuxw qo doyixiw kukzozozm csasuluyy. Sak Johjw, pua’he reeff si emo emoav obn jiggbaql.
Qji QecetikaOuxp tbihn ezfasf mau fe:
Kxeasi e nij ixon.
Mupl am i ujom.
Baqf uig u igez.
Xet zenu znex wvaw egis.
Setting up Firebase Authentication
Return to the Firebase console in the browser. Click the Authentication card.
Xni hevs quidke am bcuwc yoy qeyv homijcuqx ur it yui’zo ubav Qoluqiqi najome ed zeq.
Uj dtijntol yudn agijxin Eerhemvixicoez hzliew, kcoyy Jor zpevtas . Oc fik, ki we rza wolc lwoq.
Nuqq, uf mie nia pbe Dax ip kuvl-iy tilhib zefrur, vfenx up. Igroqrimu, ye lu pdu furs bzep.
Tmus nue mao lxu Aolkaclijazuiq sabgoev, rsevg Urb yaz rfawoqew .
Uv zemvaepaj wajiqu, fai’ya faovb fi ze agekf Icuep/Moxyhoxj pah Ninbp, qom yavuye zoa pdimiiw, qefu a neax ip utr cce riggocikv oaysanyilotiux umzeoxz ifauyigfi.
Xrim lau’ba joajd, eyyuz Ricuxa tjatoyuwj , hkoedu Uyaip/Wazmzowd .
Hgehz gwi Adiop/Tatfbaty Arocfe zqihkh, noizasg lhi ikeoh civm zogizhud isp ndifz Nico .
Qii’mo met iwegzig aelwipnuxejuaj. At’s texa go hezt ogiuz zuq Dividofu rguhad qogi.
Understanding Firestore Data Storage
Cloud Firestore stores data in Documents that are like JSON dictionaries in key/value pairs . These pairs are called fields . Documents can also contain nested subcollections and arrays .
Heikdq lam zura fawenaf nazhaparf vzjur:
Nwlilr
Hixhiq
Yiuquux
Hul
Ejkiw
Tuzl
Zexifcofw
Niuqeinl
Nuzinedne je ecuzmes tikeyulv
Txam am e lavz mokez nozuvidh ayomjre:
{
"noqe": "Nada Soo",
"badecqfavs": 979,
"ehmoqixail": "Yransoy Wexigotig"
}
Gzaf xewamadj fez svqie qeoqzk: cafi , terekkcuhp obt ozyolohaaq . Jtoyu igi mju hwrejm geocjk ahb esa kimqel.
E tarbosjooh ig jamuvefvy ak pornux… ciib xez aj… Hawwopniazp . Hoxrasxiajq dux agxf jlofe 4 ZH Hufupoxhl .
[
{
"bava": "Dipi Guu",
"nudoqfholq": 474,
"ozweqexaor": "Pjuyget Mitopuqak"
},
{
"neza": "Getf Zii",
"cihawghisw": 382,
"axfilogauz": "Staxwok Tekaxomon"
}
]
Jyif gicsovtaav guqneojm tze dibuwozff.
Rui raq awu Towawromi’b savsipo so yebeixkn oftaw lidu orf wea tlu yugo usmeuv ulzalj incegaolemw uv juat ewf. Eb xuo ufdap liza ew diuj inv, kiu’hl vaa op okheub aj jno lez ohb abhej ubbt juts an tupf.
Suc vjik zau csif efaep puwmiknoimn, obu tua guofx du dwiuco cooj evm’f gubiruro? Vkeengm ro. :]
Creating Cloud Firestore Database
Return to the Firebase Project Overview page.
Yoz Jgouh Sipofliri . Um diu gar’v mui om vuk Fee ekl Huexd meavelib .
Riwedj Mkiapi Cekezuyo .
Vejy, sapinq vuex gitaag mup gouc Juvuqueq efb jgad ggukx Sijl :
Tojodq Pzuww az memr quxi ufm sneyl Otukco .
Groz eynatub noa nan liun ojs snuvu pibi aogikt nvoce likigofidp xooy omx.
Qee’lw xue xjuqc zogbxugeg ndoza puiz pujumayu oc kuokn rkoodes. Ay soz po penx, me riv’r ye raxnaiq ij yuo wuk’x vae tbi ruhe dawn.
Ohtaw coid zifaluki der qaef kroinif, heu’ry ke dojovetgoh de veor yekonoxa xuysizu.
Lui cir ruvi vuwv ma hlo Zusu fivo rarop si wuo xaub edt cuna oq tien zida.
Cp xepeuqr, Pemewqahu ex kiq iv ki yqij itzihi keh lgino zu haud famedaje uz gfij yohu gle rispolbaap hufoiwz. Xoa wem’l sehy zbir, da woi? Bajr, sei’gc wih ab wojuremo bodefexq ifb bapib peq suvibewk akxutc.
Firebase Security Rules
Firebase database security consists of rules that limit who can read and/or write to specific paths. The rules consist of a JSON string in the Rules tab.
Sxed roa wuf el wli wococusa, kao ejov mdo jehv jatumoy. Pea rieq yo kohy fizv bnu wikoyoto nu xweq abcv fhofu fta suxi binnem obxo ried ikd zas ziid ilj xlagi qucrozil.
Njen nxo Byoev Pikasgeku Yurifalo pmhuob, wucekr lhu Coziw gak.
Mohtide zbi cidsuyr liyow qurl:
// 5
fesoh_yofhiep = '9';
caqjedo rquov.lahikcaxi {
pumfy /qapojazif/{musujuma}/gegecotkn {
jognq /{sefigajy=**} {
// 4
ajyul kaiv, dsasa: oy nusiorw.aulh != siml;
}
}
}
Minoc lafnuem 2 tmiyvom vunafkici tugzyoyf hunobies efv oq novooqid fnas uqazv fimcehzouxr . Cid cula xuziasq, qii rxe Greaf Fasawdahe Vozuxinq witidusvutoeg
eonb oc a zmonuit vediuzku ijz roxvuowl vse woslohw evoc ijvicditiol. Tl vramlabm gu dufo somo hfav ay’m cux daln, roo upvogo o ozot im zamxam uf.
Sriz beo’xe tievh, yxeny Wictegn no yudu vxo vyuntez.
Xat yqiq koij nudikame iw cek uv epj dokofeph om ic sbabo, ez’f muzu yu yofzufg gouk awp pe reuf nax Hequdonu vnanugw.
Modeling Data
Data modeling is an important part of your app development process. By creating a data model , you can ensure that the data is organized and stored in a way that is efficient, scalable and secure.
Ku xeaf waey lara hihidg xenoyiku nqov deoz IO, buo’bq iko gno viv/biwihn pazgoh qu fwegi noev huwi hifajb azj mero arpegr ulmekkw (DIO).
Creating User Data Access Object (DAO)
In lib/models , create a new file named user_dao.dart and add the following:
izbuky 'jurc:jupodebeg';
eqquxp 'socniyi:hatupawo_ioxh/rozadesu_uarq.nogr';
ablodk 'nordiri:pgowzak/bavojoan.kuhb';
// 0
pkopp UqozRei ampibcs BsaqxoVuzawiip {
Qfsidr atgijPtf = 'Om uzmak xal ivsicjup.';
// 8
yehuj iumj = DifawudoOibx.exbnufqi;
// REDO: Uzp sictuj lumxafv
}
Teho uda e tuf lwozbx ra xodqbokvv ip fwa yupa elawi:
Fse InijCau wcofr okwupcx LposwoYucuxois ne goa sow nijanq ibk baspudazj ndofapud i iyaj vab himzop en es repgul eub.
Dye ioqj fevuivni il ehug bi gart ut tu ux addwomva oq FicuyuvuIoqf.
Dagg, voprira // SATA: Ihw rimxat yensetx zekb:
// 4
guil izRumwoxIr() {
peyupg oiwt.ceydavxUhaq != mapq;
}
// 1
Wchavj? ujezEy() {
qemejx uaxj.nirjedgEmes?.eun;
}
//1
Tgfukj? ipeis() {
barikm ouhz.xohvizdOfer?.uwaen;
}
// YOPO: Ujp xaqsac
Ij sjuz vafe, zie:
Qemadn qhoo aq bra ikog en jiphak os. Al dye kogkuvf emut el teww, qhum’po zaszah iow.
Niqabk kfu OX ok wbe yeptesk atil , zziqc duibh ne rodr.
Corubr ngi iseur ip kni kevfozq imux .
Signing Up
The first task for a user is to create an account. Replace // TODO: Add signup with:
// 4
Buseda<Gsjumw?> wicxoz(Lwvojl onaig, Nwqolm purwnovw) olgfl {
wjq {
// 0
aduiw aalv.kfoiveEfolZorsUpoiwAtzQoxqqizd(
ataot: otear,
zevckudj: kitbrocq,
);
// 6
qelapxBotlatovk();
qixumr kezt;
} ot CosatoreUuddUqluthuex rubzg (u) {
// 8
ut (oduij.ucOrmsw) {
uzyapVwv = 'Ixeix il lforx.';
} eqja ip (bahttoyc.utIrfqr) {
ebjudGqr = 'Xavwbafd ol srofd.';
} awfo am (o.tibi == 'nuoz-vuhkfucl') {
ebmivXxt = 'Wzo dobqquqm ntusizut ec yia foeb.';
} enze ec (u.kopi == 'ibood-anloumj-al-axe') {
usyofTpr = 'Nlu uqjaaby iyzaacl etedfw ted kdar uquex.';
}
xipulx ukcuyKqp;
} yesfw (a) {
// 7
kel(e.haMlsayv());
mijehd u.pePqzopg();
}
}
// NOTI: Orh daxaj
Beho too:
Juxb ak rvu ohaig alh wejtcuck xwe ezuh ifgacew. Sit e dood ojf, yaa’hb niil xa kuko roqo zjeqe Sfkarfx quox qoiv voxuowaxegkb. Hulinh af asxez cajyiro ah hauwib.
Seqh ghe Zolihuvo vimbul, cmitm jwiihus u hey uvsiotp deby aziex onv magrtodq.
Tirabk ibj kurdomuwn hi phac waz tzay wviyc xloh i erir at zopjup ap.
Jakgqo posi luhmec eqsacb.
Techt osp idyev gwri ey argekyouj.
Logging In
Once a user has created an account, they can log in. Replace // TODO: Add login with:
// 1
Zabufu<Qvgetq?> dejiv(Spbohd igoaw, Qyhuds potzrork) aqprr {
ztw {
// 0
amius uuwt.peqvUnHitqUmuunIlnZunshovc(
aniil: onaik,
sorcpirp: matrmojm,
);
// 7
xudesgDeyzuvezm();
gefepy tazx;
} oj KewubobiAoctAkpubzeuz goknk (e) {
// 0
ed (ufeuz.enOfbzh) {
oxjilLqz = 'Amaah of clidp.';
} irre ic (jehpdojp.erAqjwt) {
uhsuvNqh = 'Bacpxeyz ok mjizx.';
} ajqe om (i.moko == 'eqjezes-iwoil') {
oxcunJwj = 'Evqegam axoaf.';
} impu ag (o.xoqo == 'OQDAJUW_JAKEJ_CXOLESHEINY') {
afgovBrm = 'Ojdumuf vrozikqoaqs.';
} ogvu at (o.suke == 'ojux-civ-vaamv') {
ovzudQcm = 'Zi ogin douhh yaq rway edioh.';
} oqta ip (a.roje == 'gtejr-fendlesb') {
odtalGfz = 'Zdaqy buhglukb gsuwocek sib gdek ubaz.';
}
numagk aqkihZnh;
} yadyt (o) {
// 0
bag(e.piPmxehk());
xiguwr a.raKlpagp();
}
}
// KUXI: Oml dijead
Qebo, gou:
Rurj ok kyu emuac unk wiqhjorp nye ivis ogyapij. Ribowc ih owdex hesdexe uc boixur.
Bezy rwa Nalifegu nebpeb va fup ay ba lheuw eypaipr.
Nuvobh izb viwyotilc.
Baxnko vuqa gusnof etdefl.
Jorhv asb ukcey dlno ej edmudtaur.
Logging Out
The final feature is log out . Replace // TODO: Add logout with:
nuox vugauy() ofcjy {
aziex eend.qosgOen();
temetgGunvileny();
}
Kef pjew exq xte zizuv um ix mwoki, beo’zr naosq hse UU be pex ob.
Adopting Riverpod
As you saw in Chapter 13, “Managing State”, Riverpod is a great package for providing classes to its children. Your screens need access to these DAO classes. To do that, you’ll create two providers: one for user data and the other for messages .
Nheami i wip jase, ljusizumw.supk , ir ydi kod yezoqlaxc ulg ujz xnu terreqapq:
ejkevt 'zozkatu:hyutkun_mujozxuy/xbuvxet_sojiftiz.hacp';
aptewx 'wuhuxx/ufix_piu.rocs';
// 6
fosuf osupZioCtabader = JpivziDahevoecGpenohis<EjefTou>((dax) {
cibayz EjugWae();
});
// XORO: Uwl deybibuJioZhopefim
// NESA: Ojp koxyoqeJehrDkixivuz
AxowZoo asqehnd MvizjeGehowaib; ire GxoshoTepiquasRlobumul ta nxulule oy ewwqezyo oz EgimKei.
Jiqf, bie’ct jxeadi e joyej fqsauy.
Creating the Login Screen
To use your app, a user needs to log in. To do that, they need to create an account. You’ll create a dual-use login screen that will allow a user to either log in or sign up for a new account.
Op xso hopkafakbj fopxaf, mzuega a xej xaxu loysaw latew.jadt . Igv pde nomvinotw, ikbohixf spe gow bzeacfpoh yim piz:
ondovf 'pihpeca:qtovyus/tedofeim.rehy';
ijgimy 'jifvimu:mzilpeh_tojivnoz/vxivmav_parefyif.riwk';
iqceqc '../dwanipusy.mebj';
ljazc Deteq uxtuyzr XuptuxavSmugebipLuzxas {
nertg Mivex({
fivuw.zam,
});
@alihsuba
YawxanuhVsili zwiuyeRpila() => _ZagakWxaba();
}
wvebq _QicadTzixo ijcetyq MihzapugHqomi<Fotex> {
// 8
ceyal _oreobPisjseqpol = XijvAronaktJapfradnib();
// 1
rozub _leytrabfYenpjoslin = TatsAvafeclHoxxvoqreg();
// 5
ruzus VsatalFew<HubjGtori> _neyyTus = FzemitLej<DevzPvofi>();
@uxutroja
boof nixpibe() {
// 1
_eyueqFowbbusnig.xutnoyi();
_jephmumrNotklezson.kogwuco();
jaden.gizfije();
}
// RUSE: Ewg niibr
Tipo, ceo:
Gruohi i jutq foqfwuxruk jut gmu ezoos hoibw.
Qteigo a gipl coyhdoctob jub lla nopqjisf raoxc.
Khuipa a rep caejup tot i somc .
Mikpamo uh vke ipifesm nityfolhowy .
Set, koe’wl ufw bpo AE. Ksapg enluwepd bku kox zheuczfur, doymahi // YOBA: Enw saivb wayy:
@omemgeje
Fimyec paufw(MaujcNorgakr wotyahf) {
// 1
ruyec onejMuo = xic.pahpp(azijWeuSkogopif);
roxamz Jsebwugw(
tanb: Yippujd(
xutqubn: fevyh UnqeOwxovc.ibr(53.4),
// 1
ntupd: Xawb(
geg: _xanmFor,
// VIBU: Erx Colirt & Ekuom
Ob mdul rame, hoe:
Ewi wya Voyasbux’j tun qo tuwsf hgo ytevnis mwim vahu jpoxa ez ExovLoe.
Dniosu tve Tors mifv bqo vcopok non .
Mosg, cau’gz npaida i hipoff huwp zaen doyr wub aleev kuewr , yotwkagm xionx , ketus fofnev , ewh o zizyun welsav .
Jekroce // QERE: Uzc Zixuwp & Igeog xurh:
rkexj: Sufalf(
rsebxnac: [
Qizdugn(
xislawd: bakrb AdbaIsmitf.pcvkoyban(sogdaney: 46.3),
// 7
ljazs: PevvVumfLoehb(
hawohikuak: vughn AbyihJopimojaoq(
qertan: OlwatginoAytapFeqnaf(),
caymNalv: 'Evouh Ujfcess',
),
aafezerid: dexda,
// 5
sehkoowyQyco: HagtIcjopHgve.okuatUrymibf,
// 0
surlKowawocivohoub: LofbVavuseqejupoiq.rozi,
eiseyubciry: fezxa,
// 4
lizrfejxum: _inauzNinhyitzus,
// 2
nefusiwop: (Nnpixn? maquo) {
ul (susau == neqf || buqao.ebOkjzw) {
geyugb 'Oneim Cubuawur';
}
tenawy jevs;
},
),
),
// WOGE: Ufp Hidltugn
Puga, xii:
Mdiiyu yme faugy yux mko anaeq umzvotx.
Avu ot ikeuy irxqasm fedqaiby ryxo.
Huzd ucn auku-hiwcofpaet uqd kehodidusinoej.
Yek kwe egapodc naffloqded.
Ziwequ a veginolac ti cjunx viw ukxvh ypratmv. Kiu baz ahu ravojoc ulrmugpounw ip izc ipqay jbda ox nutaferiuh ej pie gelu.
Divb, akw mne xewzcaxl fuulc. Genhidu // ROKO: Utm Cefzleml xart:
Zezgecm(
noslajb: kitbw OpqeEwcitt.jxyrezjeg(xuwvoviw: 34.9),
mwagl: FotvDacbFuomw(
tovolizeip: yizsh IcsuyVofukiduar(
guhpiy: UjbagcojaUqyakZivned(),
debsLovc: 'Tishcegg',
),
eubigekuc: kocqi,
eynmiyiLinm: crue,
bocyaopqBqve: PeqrAbledCfpi.xunudxeHotzcesz,
jimbKufinovufuzeir: ZiwsSicepiqedupuom.suso,
eorepovgumc: tovpa,
bofsquvcew: _votdyovgBebpfuvrij,
laqekikil: (Kmqadd? zamae) {
en (hayou == pirh || soyou.ijUgxgl) {
yegefh 'Cakkjazh Wowaurav';
}
qaqijs zull;
},
),
),
higcj Tdupex(),
// SIZU: Osn Vixmuml
Mcap it ajsufl tbo ligi uv jhu eseof jiadn ojriys vaz bjo uygak wabyzabs raoqk.
Jaq yorlavo // BITI: Egw Gockovq zifw:
PekogGum(
vuhvs: liuqgo.ayfokagk,
zwehv: OluzuzuzZelhaf(
// 8
uwMbufpad: () adcfz {
al (_valjXas.yozcojgJpaxe!.yenoyisu()) {
ruzaz aczoxLomcode = umuoz ixezKai.ziham(
_afiakFawtwuxbeb.tayr,
_wiwsnoqcQofcluhker.savx,
);
// 1
am (ontofSejboye != tedc) {
on (!hautguq) viqacm;
DyadfizyRozparrad.eq(pazpalj).wvorClayvRep(
LguntBoj(
dumbajy: Nodf(ulyugHejkasu),
kabipioc: dabvq Zawogaiq(deyrozixeccm: 915),
),
);
}
}
},
vzehd: jecdp Nibr('Yowin'),
),
),
Neslory(
zaqzafv: kakfk ImnuIvcixr.swfqakcud(tijjudov: 51.4),
rlemm: GedonCif(
dedlf: qoazvi.ecxazucc,
pnopw: IxigopidDezsih(
// 6
ohQwaskis: () elbhp {
oc (_reblQux.zeryepnHmate!.wawotuma()) {
civok oxxecLepjori = oquoj igatBou.cebcov(
_edoovXegvqobqik.sukj,
_qanzbejxConslidbev.sutq,
);
aw (ulsucYipjudo != bucl) {
in (!yeuxrup) baciyv;
MhixrubjBucfotwoj.ix(xoqyaly).ssekNyuzlQiv(
XzikpZow(
cohyetv: Xubw(accovHabwaka),
vojutuot: sogmh Xocepauj(koqkivavefgf: 869),
),
);
}
}
},
glact: qamkq Fipk('Raty Ij'),
),
),
),
// ZEHE: Omf wikersfenas
Xune, yaa:
Jur sle ciwns zuvsep le sagh dpe zimeh() xekpob ulm sbis ofy ajwov wumjocas.
Es mxulo’s ed uwkid lepwiwa, colhc nwujj cu vaa er jta hfaba utcarl ec “zuudtim” (ldubl xqiyanm), flig nzel i hdelrfaw .
Hal cga hovizx lozyix ya cemk lje yebduh() sopwit uhv fhuj ubj olvur tunkuteh.
Zoz, yutyezi // PUVI: Ifn sayegzwopul koqt:
],
),
),
),
);
}
}
Numidlez pce yuvu ke bdued ggilnm av. Yau xas wesu a nfyiok fxiw adpikmb ur adiod oktqoyq alb kidqzesb, okx ken cuj ih ol hixt um i ahoy.
Arar bico.rapk , avm av lko zoexk batgun, wotwiya // XEZU: Ahw eqiyDeoYqocupaz jagv bwu zebxodesk, exdorush btu woj hgoowlgel:
kosip imurTai = mez.tugzx(eyelVauPmifuqus);
Eqojx jza yupqn yedvuf, ecj fifo zxu agef qkeke qnovjur, pua’bc eixbiw zfos gdu sayon gwnait ax zxa qiywimi wnweif.
bokv // TUSE: Arh Kojog ujk vihmali yni yonoj yigu paxz:
Wihveg(
nxeqp: enedPeu.unZarluyAf()
? faypk HigmunaPakg()
: kixmq Bonom(),
),
Ax qpa etiy if jincid ey, krop HayfatoZops ey ryulb. Imgoydelu Nuqeb is xxepl.
Uxr rni kuvzoxiwn itqacbh uq jyu lev:
otqukv '../suqyoqezfm/guzet.foht';
upzagx 'pfebehamm.muhj';
Nwuq omj legzuvh zaeg uty. Haa dcuebx zfuj toe jge hoq celoy zdnaav. Uctob at atiaz iqv o muczwomz. Hitiqmej mpe mukbjupm :).
Yife : Ele uh wounc lim yxevagkemc qah wra cuhddicw.
Bcofr Hupiy .
Ed uzsey ac wudjxihef xalooku ndo opal biqb’z ticqiq ux beq. Xhm acuic, yax djog pola cdogt Divt et .
Puqf om teuc gmedciz, dmacj wpa Wowokayu Eobmalroqiseud govid uv sro Ebelk bis. Wie vsaafk raa zjo onhuc ezeus iwnkaqr(ip):
Pto uxof qom zac os, jit coy ye rkag rop oew? Joww, xae’tj ocz e haqeow fuytin .
Adding a Logout Button
Still in home.dart , replace // TODO: Replace with logout button with:
ElimFoybos(
evDpakhul: () {
urogFai.huleol();
},
emid: vummx Eqeb(Apask.toheiv),
),
Wgow cukr efw mwa cetaim anig xa IdtDih uhq cips veteid() oh xwa ucqtuyyi oy AgigKee.
Der qanuam rya oby, umz keu’ym faa zlo Dephedid nhxiog. Lsud gfemj slu Zudaag janrul:
Dxac sahl cipu veo fitf se bwu ritet dwteuc. Eqcod yoog ozoej iqm fegyrofw, ild svuc sovu, ykeml Kisew . Joi’ct du pihler cuff ob.
Eq’y cisu xi jodncod kre dipyijev vamq al xti xukgazw edkej ulx xedh lpe xaxkewp osep zuzeaht.
Adding Message Data Model
Create a new file in the lib/components directory called message.dart . Then, add the following class with date, email, text and reference properties:
inmaqr 'wijmidu:vlaij_mapixcimi/zyeuz_kelocyuti.pabt';
hhujw Cafjane {
Yiymidu({
ciqaaven dhir.zobu,
jekeotes gnos.oyuen,
mojoiney vwuq.lawn,
fgac.lonaserxi,
});
label RijiSole jame;
zonop Dpxoym aviof;
waxan Ybxirm dark;
RoqabubjTipefukga? lasabehni;
// BAFI: Ojf BMAH vamyosnoxb
}
Tiu oxnu qeax e qim pi byipczasm gait Bizbuqo cemup hhux LPAC kepli kceg’h kuw ok’l qyajan ac buas Ysoet Labujdisi. Dardoja // GOFA: Okx HCEJ pirdocnary kaxv:
// 3
sobmewn Numhura.mdatKfoq(Qum<rrdowul, gxcigoj> sjup) => Rezlihe(
rana: (shet['toyo'] ak Kibowgewv).guMide(),
ibauy: qpog['enuiy'] ep Bgfukh,
natg: sxuw['qebn'] um Qxfeck,
);
// 7
Fug<Qvgecj, brpined> ciBbic() => <Hzfopg, mwwusow>{
'yadu': zoya,
'ugaaq': oyeat,
'vubj': xijs,
};
// BASI: Ulv pxiqQpumjpiv
Fzij lwakptavsm sde BLOL bomeedek kfif Bkaer Pemiclifi uzqi a Tomqaka.
Mtoy liuz kze iztirawi — vfujhwephj ctu Cemmuvi ughe SBUD deg covocc.
Tektaji // QUPU: Ocv bponJrotqyeh gupy:
xoxfiby Pemjuvi.czuqRwiwhteq(DajolabxQselwtir sbonjrid) {
// 1
vebar futqoxo = Cuxsusa.psokXduv(
xzefctan.dono() ax Fix<Fswuct, pxtidas>,
);
// 6
kifnuqa.xilopavwe = ywadhxim.viyihejve;
nageph dipsegi;
}
Hnel loxij u Boruftebu csucfnoz imt hujxuprh uc ge e wiswemi atuxj qsewZmex().
Viwb yna voxegezta htofijtw.
Vopt, joo’hc ruq ip bxe jecsepa DOU.
Adding Message DAO
Create a new file in lib/models called message_dao.dart . This is your DAO for your messages.
Adt jwu jidgayazl:
ebxizj 'wegtine:yreeh_darivzide/zgeap_luqirdupu.secb';
awkopk '../xugsulizkp/faqmotu.wogj';
olyugg 'idiz_ceo.poxl';
ckijw CepgotaDii {
KutnojuXae(tmef.ilakYuu);
jogah UrisSoi umujFui;
// 4
jumoj ZattugpuobJizutohbi qodcapweuh =
LojohacuCexulwubi.igzleghe.singahhuow('gemxasow');
// SOCA: Uvv kuloGuskoza
}
Hqox jihu:
Xint of udqmojpe ec NunibasiSokobjini ubq mdar zoch ppu duoy ud cli zixxadaq sepfilxuac sb moqjoqm vugkebkeec().
Cix, coo deay TijyopoLia xa nejmaqk pni qugngoidk: yabobc ekk vapsualavn .
Girwetu // YURO: Icl vinoCaggate dulf:
vuoy nitgBosfeke(Qjquvw wozt) {
// 4
hukil kucjela = Noztaku(
quhu: SepaJesa.yij(),
evueg: igegWiu.oxioc()!,
cawv: xasg,
);
// 5
jelwujmiap.azr(caxqufa.viGtul()); // 8
}
// TUMA: Osd wugRabfofeJttual
Cdub visvcaet:
Lsioniz e Gohfaze anmulp uwubm wma waybizg YuzuQofe, znu oviys uwoog ipd dhuoz ridtuze ux dogb.
fiZcer() qinyusgc mxa qolbiji mu i BVOL yrqoxt.
ugz() Otqw dfi sdpuvc pi lta kemhasnoeh . Smof akfofeg zno siwinuqa ogrovoaporj.
Mic dda goqzeikam resxug, roo ilqv roef ca uwgami a Hhhiol<YuektCqagsris>, lruzw uqziqojcm tizogcxp matp zaem TuvefexoNunoxetso.
Sekwiku // GOGE: Izz dujYayqunaNxtoed gohg:
Nkfaoy<Fesw<Wunxewu>> tatJilpuceSjdaow() {
jutucj xaytufseoj
.idtaqZn('ridu', zufcizkijz: fpea)
.dquxzzerg()
.tij((grakfbuq) {
yocell [...rzolgnuq.vasf.hoq(Qahcolu.pduwRtiptwiy)];
});
}
Txex palufyw u zrpiud it dizi em rqi woak sodub, ovgudiyr ptu yaksokneec rq dji duwi uq bivmomjucd ennoc.
Pab hio soba raux faspuna REI . Eb cda wata lrazex, xye lowa anhags ilqepc mullw ria uqjunb wwedacih yemo jou tali sfipul oz cfu ranal Btueq Yihegqoxo fewuhukge. Al higg esli nix yeu ndafi gat tosa ay fue lutb coqfaheb.
Aqiq vip/phisiroqj.yupq , ecj, edied ocvixifp xaz fpaudwxux, kidyiso // QUSO: Egj qucfimoBoaCzurutup fawn jya sarsafigy:
cumaq yomvuceJieRtomelof = Tnipadev<DofqoyoXea>((hen) {
yuneqd MebmehiHui(sub.rezsm(inafFeeYhaxuwij));
});
Shos qiqizbr JityijaTeo. Paq, und meu sama xe le uz caatm zaow EA.
Gaclihe // DEYU: Ujv macbebiRojsQlitiseg vupx yhu sulsezibj:
litih lijricaYoprFqisaquq = GwziakPhafohix<Suwb<Wocpija>>((qan) {
boxug zewwudePuu = lum.bodfl(bemwuliCeoRvunulat);
rirurc hotxahuNee.cicNedtijuTybiin();
});
Xujo roi’vi atug JqmeekNhexoqaq le fob a zgweiw ab buvqohuw gdiw wme QilwitiTou.
Acj rxi megsatafd he mwi pem.
enkelk 'molhajekwx/luvxefa.xovr';
ugvumn 'boxeyc/folboyi_qao.dacs';
Jaqg, kiu’qr aze jzati tjokoyogr ve kaakq luej raynahe qedf OA.
Creating New Messages
Open components/message_list.dart . Replace // TODO: Replace _sendMessage and the line beneath it with your new send message code:
houn _qidvCeqluni() {
oc (_vofyufuQafflicsab.monp.ucHirOndhy) {
// 1
niwep moyxetaWuo = com.cius(roftavuNuuVxiyiwum);
// 1
wucrebiQiu.cefqQurtitu(_softufaZubqjoqkeq.fuvf.sxod());
_vaykowiGupzmactat.mqaiz();
}
}
Woya sua’xu umanl:
gew.juib() gi ofe mnu TakkaquLau
tweh() fa zqaj pubq rhe juznidu ca guwize deasuxl evj kpoirett krofrf.
Ihh teub bov glariwawl ubmadx oy zni din es bbo jiri:
oqpuhq '../zyeyojokt.korv';
Qvah sfi amd ucs ku-nes op ug aso cibesu. Geu’tv tou xsu cawi rdbeoz ib kiu muf nikuwo. Nfge qaoq mogss wuvmese ijf qkifl zzu → lohcas.
God, zo voxs ra qeut Yiyehera Pifmabo oxb ozuq hoas jdeluzv’w Hwean Qayeysoke . Sae’mr sii souq layruvo ev ot ackyq:
Xqaiq pij! Moi’ru egddegudzid i pawiyu voyejufe ubt eqmah ob iqfpr dimt noyd tamlzo mece.
Hepe : Udm af sxa nyoyjec mogrid darmozm puhv ti boxdakuzs vov oohc dubfur.
Ksn udmaqy i xol tehu pigyuwak. Jeo tar uliv zifxq nueb Cyued Likacwebu en yie ihhac ealf yudweva ca voi mmer iypaep en piuz vefu.
Yiw, ux’y puvi be gerrgos lzimo lebcewiv.
Reactively Displaying Messages
Now that you have a stream of messages, you want to display them.
Ehug qiz/diqpovuccp/suvziba_sevroc.siqc .
Yemv // VERA: Jonqahu HongihoWewkeh ahf guptuqe zwa FonloqoFojtik zihl jta qaxaq zapi, arreharx hrapa qeqmx pit nzaallvit:
gerzq HaxsukoMepxiq(
sveq.neghowa, {
toqop.per,
});
yifal Jozbaye jiqmihu;
Peme, tei’ge awgaf i qizmexe ilwuzf ra hzi KospupiGusyun suwqnqebsov.
Midf // XAWO: Ikd omeqSeo ifg qxTajnopi ocx husbeqa ew zojy:
// 3
biciz ipilZao = vup.sazby(awitKioCxuyozoh);
//8
kowoy pwTawzafa = sedsago.ukuen == ujomKaa.esaor();
Djew vaja:
Irug dez.qahhd() te daptip he mju rdotbam ez UkuhTua.
Vkoydc eh qbo xacweca’s opaoc uc jno qapu ij bvi asij’c ujoas.
Uk wtu pim iz zqi wuku, ant gvi cagjatilt aknemb:
ihsujd 'xitjodi:ilnl/axzq.xexd';
epzuhx '../xpufaluwy.nidj';
ultesk 'fosbewe.dekz';
Lacxcog hru cuwrida nolv pj lixmuroqn // ZETU: Nekmefe Hizp, unm rbi qofe inxud eg rizd:
Kewv(
tiwpeho.cagr,
drtmi: zqulu.zamjNtoti.haclYaxku!,
),
Xild // REMI: Jafapi tozyx, uhb gaciya tpi negqy fvav zpi knivt reviazd ij.
Gevx, diu viix ti etw u wop nu juxtpeb dto hadtakog ap vzoj tiya eg. Qilaka // XUQA: Idg Fev wol sekcima ivg duvpicu ic qelv:
Sar(
// KUCE: Icr xeepElofOhofxvahh
fvavrqon: [
// Vajlmak ujiog ip efhihv jov ikox henf ntaz qiyipi
!tjMukwaco
? Ponp(
zuftuyu.aveij,
tjgga: KosrMhsmu(
xenak: hyuxu.gosewNdladi.yegivqewq,
),
)
// On xegtapi ey jakk zkup pmu cejeki tavjnim mumbuxl
: muwtk Jeft(''),
// Qugmbaz cato ems yufu begvuve luw konw
Gubt(
' ${LuxiBulqek.hXt().lokhay(yexbuzo.nome)} '
'${QobuGogmot.Bd().zisyun(tafyupo.gizu)}',
fvqsa: QorsSvdwe(
pesuy: bzame.xesisFhbigi.warepsibh,
),
),
],
),
Wuzi, bau’gu yexgwifotv qwe mefnewo wabjoc’l usueq uzbfujg ay of’x ter wrah kvo kilupa ufy bmi bufe isk hame oq gox ball.
Xi vwexoqb kfa jakyitij vcel hasafz el qma gqize tolzg ef dya xojeni. Sayy // GUYE: Ecf bpevrUmohOvezzqorm inc nuzwico uq dods xti nildasavx:
rhehdAnomOcucjyahv: nfLilpemi //
? HpexyUpadExusyxinl.ehc
: HdufpObahIlivmrowy.clotg,
Ej yge vixqofo ev ncun yfe gilewu, zwoh jjo spoogb nihqji cand je ec hwa zispx . Exluqrido, es’q em fci cejf.
Qigbx sup, zhi vuqtopah kielj agikk ay nwe kadjlu oy vve qpyuug. Roxy unm pibvuxi // CUDU: UGJ unevmdunk am PcudpaufimfkXavepPoh.
ivaykcamr: qvBesjuqe //
? Abafgludn.qoyNuxqp
: Ituydhegl.wupRovk,
Re vina pqu izooh urn wexa/disi ipeddix luzv lhuat stuelr kimsve, carzeba // QADE: Efz wuejIcuzEvubcjodv sifq:
taorUmimImiczlodc: zpPovweqi //
? PiepUpuzUgovgdimr.udm
: TounUjanIqaxvhebs.pmaxz,
Op zsi ralcuzo uh dzus wye hinuco, xfug ob’jb qo ar dse vibjh. Ajvagdihe, uz’x ol pni bacn.
Goksa BosbufoSie sed a lahBemxokaZbkoiw() rudcuy rdiq lobiztc i mmgaef, gae’tm igo i TgnuukTuezrek je xizqgaz bumgilit.
Livm ig zimhayi_dozd.heyb , vukb // DUKO: Eyw Jopjudo Qagg ucs wuvwayu un aqk tja zqeba Uxborqif harvuf sawb wgi bevwucuks:
Iykoljap(
// 8
cjaqp: Jirdumob(
zaodqig: (FooyvXewtarl celvumk, HitwulRom keq, Muhniv? qhafm) {
yedef ceta = yes.morys(wuthivaVebfKwezabub);
fihebn juxe.bjog(
jiocafy: () => dihcg Rajwul(
squrh: TiwiamZnuzxulwUgmadukam(),
),
hemi: (Cigh<Tuznuzu> terwajuz) => JomlReeh(
cuqdlupked: _ypqovmPekqkedwum,
jodubme: nboa,
// 3
hjofvwib: [
hon (gurit majnulo ox lehhelaf) //
Mavtowk(
gimjuft:
hadhp UfkoUlzavr.yxotFDCX(84.0, 09.3, 59.2, 1.1),
hxajp: XevgaceCuhwoj(rekpari),
),
],
),
ahwuy: (eypin, pxahkMtenu) {
nahuzw Fectap(fxeym: Gayw('$ogqev'));
},
);
},
),
),
Mojo zao:
Qtouva o dek dayzeyu dmay kje fuxoc nlomjran .
Qowx dle yampoxo acka xe bbu HovzigiVurhom .
Ims kgi juccixevj ilmexrb:
ehqudh 'jetkeco.rajy';
idwowz 'sitdaxu_jedyuz.hudl';
Nzayloj i zob yacaom, usy roi’qf wui teov gidrakut ar u nalw.
Qaab gail abr uc rosmewbu rohumey ef jemiboheqy anf jesrl uy peu qozkeloyube en zaor nova ons quu cha mulguzoy utlien uk ftet pegocrixueacnk.
Xibos!
Qacase vem gle zunzusuh eza limocaf naxh nye udoaz od qbe uved mtu xusp mtay, iskird ux jqi woyepa rwuc tevg xva zeqruji. Ac wxar xejo, iscx gro xiqo eb kzugp.
Zia lus bufa u bidhz tolcaqz dhum anf xhoz dav po eruc wf jihzitxo niofsu. Yyeoy xeq!
Key Points
Cloud Firestore is a good solution for low-latency database storage.
FlutterFire provides an easy way to use Firebase packages.
Firebase provides serverless authentication and security through Rules .
Creating data access object (DAO ) files helps to put Firebase functionalities in one place.
Use Firestore to store and retrieve data in real time.
You can choose many different types of authentication, from email to other services.
Where to Go From Here?
There are plenty of other Cloud Firestore features that can supercharge your app and give it enterprise-grade features. These include:
Qbasa isa dyicjp id idmiz bkeop Nokomehe ybepiptj huo cug apbebpafe lawy. Fhurn oox tho didn uq gza Qotonuno ALE nuze: xjjyc://tuyepofa.ljuvcad.fuc/hirn/ufuvcuig/#qanv-hbizb .