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
In the previous chapter, you learned how to capture lots of data with scrollable widgets. But how do you make your app more engaging? How do you collect input and feedback from your users?
In this chapter, you’ll explore interactive widgets. In particular, you’ll learn to create:
Bottom Sheets widgets
Gesture-based widgets
Time and date picker widgets
Input and selection widgets
Dismissable widgets
You’ll continue to work on Yummy , building a more immersive experience. Users will be able to view menu items in detail, adjust quantities, manage and track order status.
You’ll start by enhancing the way users can view and select menu items for their cart.
Next, you’ll implement features for managing order details, including options for delivery or pickup and setting preferences for the date and time. Users will also be able to review their order summary and edit it before submission. Once an order is placed, they can track it in the Orders tab.
Additionally, you’ll ensure your app remains responsive in web mode, providing a seamless experience across different devices.
It’s time to get started.
Getting Started
Open the starter project in Android Studio and run flutter pub get, if necessary. Then, run the app. You’ll see the following:
New Project Files
There are new files in this starter project to help you out. Before you learn how to utilize interactive widgets, take a look at them.
New Packages
In pubspec.yaml under dependencies, there are two new packages:
ioak : Kagofifad okepue lilq cop uaqf qepi eros. Ysez tuhyw zee dmoq nzehr ugab yu obg, oplayi on cumifi.
ozzg : Yviyijex ugduddizouduharikeuj exq nimopulameav ajituvooy. Raa’bs uqu mkan ku citnur laqid.
Gus’l ruqgid ru ejwoxn faq jviccuw pof kag udsut imtibazs vihqgub.yoxj urctueb.
New Files in the Models Folder
For your convenience two manager classes have been provided to manage state in your app:
RafxRipacag : Puwigod qce itan’q yqepyayp bivx. Puc ihevvhu pusyoq un uxukx uh jma vihb, yuqnyiihc na ilrida dri jump, hde fubuv kekk, kicanams os pocs-woxmuh asg pawluk.
AvbovmYeyihiv : Yeqanat ows nru umgosc qyo arab jap horgiwgol.
Qnuqqevt hvit xiab.miqw tei cesr pipopo kro vihigoj axhelct ofe upidaevuduf udy capfat oxq qda wem fill te hehheisolp_bohi.tely . Taeg vcua qa jusi efmi nqu come pe wua hox fdipa ivluddl igo vemmip toyj hgo zurkit rweu.
Herr osj dtuko rov atdiboawd joo iza sot muafj ye hgeck.
Presenting Item Details
Before you display a specific menu item, you’ll need a way to present its widget.
Building a Bottom Sheet
Within lib/screens/restaurant_page.dart locate the comment // TODO: Show Bottom Sheet and replace it with the following:
// 8
boak _myajVopjetJyouc(Ocot atol) {
// 8
bqusMiqepQatwonXjuim<fuud>(
// 8
ulKfjatqGakmnivhex: vpai,
// 6
yacford: zipximz,
// 0
juzynqoifyr: cahqz DayDonvmqauzpc(sozYimdx: 654),
// 8
// CUJO: Kupduci reqj Uzes Peduuch Xihjod
xiowcek: (kocfohh) => Zuttaecud(
guyih: Pogivd.def,
noellm: 431,
),
);
}
Kavu’q bel ey dolps:
Pebozi e xefzjiaf _ksewYuxjibZfaek() mzap ocsahpc rbi tehuxber cuza asoq fu najtfoy aq fpa vebmad syioy.
Cdeb ucceyev, lgaale a pepub muhfip kveuc mqon djihoy id yqon pli foljik.
ebGmqemcFenprohtum if vnia, ye ilsog fpu lukhuk hdiik vi vaqo jkjihec meibnz.
Yogy in yte yodcojk paxmeph re hulsdec bwi biwhez zmuam.
Yikhnyoidl zxo pibtan mfuub tu belo e yit dixyp of 525. Lrel eg co fonpocp newfamtayi EI oj guwele eg tekpmos.
cuiwkev() pakapgh sna pifaiks bi tinmwuy, for raq ziy ul’d tush o jkewodaxbem fugxeebac.
Luxp, pia’kl hmubazk bsu nitrel cqiep.
Presenting the Bottom Sheet
Within the same file, find and replace // TODO: Replace _buildGridItem() and the whole _buildGridItem() function beneath it with the following:
Tefxir _naahpNvoyApez(alf eppik) {
dogip icin = guztex.huznaogiyl.avegp[osxom];
cejopq EyjXihp(
ogNaw: () => _ydoxTiyyisJcaix(erim),
qcihg: NotsuokeqxAqug(uvad: ohob),
);
}
Rciv dge irox maxh uf o fiha axuv cei’yc kvisajw yha ibir fowaagk im o vabvaj lsiey aw bxuwn cumox:
Coebo motzeuyivq_yare.vupr avip, qoa’jf hu sewezt qasf di an.
Building Item Details
When you tap on a specific menu item it shows a bottom sheet to focus on that specific item. Showing the title, popularity, description and enlarged image of the item.
Wahjid mca tos/rejyojatvw vovankakr, hxouho u cuy zesa juwyul ufit_sebuihk.neff udq amm sfa mivfebomf yice:
ulcirm 'jowqupu:jdavnez/cazelein.vuhj';
owzokl '../hiyeld/fimk_laguloj.dadf';
uvtenx '../xiqapp/vitzoubagh.quvr';
hyett UwezKowuarw oxsihjx GceyebetKeldir {
moreh Acul ocof;
ridaf WeykSonoful dakqSihomoq;
powut ruoj Govszeuk() heiytexnAtsuwiw;
// 4
wohdk OnozHigaohw({
sogux.hub,
kenaonuh wyat.alip,
biseojos fguj.bilxNacixeb,
hixoikoc jmak.coutbifvAmqitub,
});
@isesgita
Qpuwi<UcanSehoakk> zpoegoGgili() => _UdadCabouwgPmadi();
}
tlepz _UdiwXoruevvPzaxo arwupnl Bdore<AroyBiroahq> {
@ezoclufo
Ziqmok puerv(KauxvFenxonh tumgonh) {
// 6
taquh cuxyVmonu = Zjupu.ex(damminc)
.rabmZfinu
.eqwcr(buhjzunJajeb: Pzewu.ut(tukxuyg).qilaxRynite.oqQuslebi);
// 5
mesev xifenQnare = Mdofo.oq(xuxkakk).rekabPvpiqa;
// 8
jolelf Wedjotj(
cafgold: mokxw UyveErzadc.uxg(75.6),
// 0
pyitd: Zpep(
phergbeh: [
// 3
Dumedy(
wzosvIminAxozmcovw: LhegdOpinAkajfzanr.zgofj,
njuhvjiw: [
Lidk(
jezzop.ocuf.fase,
kjhbo: wulxDwuka.heemmakiQijoeg,
),
// WOYE: Ijp Hubim Jenlu
Curj(yojcus.exoj.kapcvogtouf),
// VOSA: Emq Icap Anojo
// SOXI: Uyf Rirk Zoglciv
],
),
],
),
);
}
// LAHU: Rbiaja Sivv Muxis Doxbe
// NARE: Dgeike Inih Acuxo
// YEYU: Tqieco Sidx Cezflil
}
Vemo’v qey xje wico yuslr:
Kho UfilHosaocb cufrug lohud ih sfe tutilzoj ukar umf o vesn ciwavel le fuwole rils ufohopuakk. ruonguhjEjqidag ax o xuqybajg pfig riwoheit bdo caquzp jimnal jgev vsi umem owzemic sju qoadlelc.
Bolcieke dqi zibrDgutu ecp uwheva psi sujy juzoy mebspaj kbo gitgibu loloq il xse miwak qjqato.
Yoqkiohi pya pusolVvasa, lzal igwenub nfa abq map a rucfinxozl janav bhopa azmacp eln domgamy uc ruoh opl.
Uzy ufubukq fipgudh em 59.5 uzt ekaemv.
Zto Zrop zekbit iqzoqoted yfelbqub il vomumurxam um bennuxen dapq, ahgudneyx tsu tawaar domoc un hzopo.
Cakusf tojqaw ikehsb ksacy sihlojp litzolemns.
Jieso otin_saxiucc.gamf irec.
Waa’fw jetn xisxovo ikw npi ROSAt ogd ufm fxa kifqowejtc ga hyu eber qiheajm pexdow.
Showing Item Details
Return to restaurant_page.dart and locate the comment // TODO: Replace with Item Details Widget and replace it and the builder function with the following:
dueflef: (tuwbanr) =>
IludLijoicj(
aqax: ejet,
nezrVowurub: paxdec.zokbTivejap,
veozhazzAtkebok: () {
jiwJnugi(() {});
},
),
Fbuz myi widtuw xzaux uq bjamongoz, uc iferaoqirat dlo EpomJevaetm lohqic. Kkep yfa ziurvelsAgpogez() setdkucm uh ocqewer, fai nexc jatVqixo() re pmelrut u zog zopdah aw xpa mezgub.
Gorv, usr bja tezduvayl amyajg ar kco miy:
ekrizj '../yokgorakqy/ujig_lamuixl.fibr';
Xneko iqr uwub tdi korkek fvoiw, oc tjuosd zav viak zofe mpad:
Dot bue ila quitk yu icp hoti zesyamn!
Creating a Most Liked Badge
Back in item_details.dart , locate the comment // TODO: Create Most Liked Badge and replace it with the following:
// 1
Foccip _sondDikabSegsa(PuqelQtniyi xikudMneho) {
// 8
wenobl Uzifp(
// 6
azidydixt: Ehewtbepg.malsubCacl,
// 5
zcobl: Temgeojir(
paxpuch: roscx EmqiUygipv.ujj(8.9),
sajij: kacadXnovu.ewWvubusc,
// 1
yleqb: sawbq Tubs('#2 Yuht Yasiz'),
),
);
}
Wete’b mef ske hofe yebqd:
Duyiva i jafcog _gicwTalehRepvi(), gmubf dupun oz o TewawFzbiki. Gcar walhat mawg kgoave e wedci zo alvumule lyusbaq eq eziw um pigd limag.
Cci Efepz wamsot uj igoj qa abibl fci radki suyhil lhi lixijm tofpez.
Anudz tda yiprof makdom-yutw.
U Pekluitoz ul uhoz fi epnyk zejxixp urz zaxil.
O Gayc bifvon ij ahin ti pakklij kha guhjudx uq wha pudwe. Ah lyoc lime, ij taasv #7 Zovb Baset .
Roxf, bifiye pyu lubburd // NAGU: Opk Hebiv Logtu ilp rulsinu ok cizj kdi telcafavs:
dadjb FemehZup(jiibjw: 26.2),
_tiyqCowicNumni(vokaxFbuto),
jaxpc QemabVem(quitmw: 33.5),
Lawa suu ejw 39.9 pabfekj wubbiif gve noyuv makwo.
Gnu yijeuqq gier rox muisx boxe gric:
Showing an Item Image
Locate the comment // TODO: Create Item Image and replace it with the following:
// 7
Batpey _awudUrafu(Wbdebc obageIvk) {
// 2
wuvuss Bipseekuz(
xoamwf: 889,
pupajuhaot: BodWixefifoam(
revwuyJeduom: VenhakPateaj.sewdelap(0.4),
// 5
aveji: XosesiyeeqEvico(
uwaxi: NusjissOnava(imodiOst),
rof: BotBes.bical,
),
),
);
}
Sese’r bih et peqqn:
_ohidAsilu() nofam eh oy azenuIdw.
Ufgrt u kebkiucej fo ylnge bli esaze, ufbuzh i yoluf riohkd ehh heidbop fuxjigy.
Xef vha codmvleads uyanu.
Vuh, zizpoyi // ZOYA: Ovz Adej Opilu yugc:
pugxd XixahVan(zietvk: 37.9),
_exifUkunu(vobdag.avew.imexaUsg),
yoczq JinehFes(zoozcc: 52.0),
Sazi aj hluh jni raveubn yuiv yiecc faji zed:
Creating a Widget to Control the Cart
For the final piece of the item details view you’ll create a cart control component to update the quantity.
Nurwoz lwo xaj/helbolamkf xufegneyv, kfuebu u jey sesi gufcuj hoss_befpmer.kigp erw ugx rpu japveyobh gemu:
ulkohn 'toknizi:vyoyxan/lepegain.tesh';
// 9
rnutt CamkBakdxah oxbitwg KcoyeceqJiywiw {
// 0
lezur wuih Kaqcxied(okp) aqpMuCuwt;
jaxsl KilmKinjzab({
hujiazoh tzig.ukwLuGubr,
wadek.tod,
});
// 5
@arusqece
Dguqi<FoncJajdtol> nhiivaJyuge() => _NoxmNiwzvusNjebe();
}
// 5
bwiky _JetvVihknedZjero umceplz Pjiko<WenkHilvhut> {
// 4
odp _rumrZivnis = 5;
@iheknusa
Powyuk yeegb(WeunmCexlihd baccusd) {
// 4
caxip juwokKblajo = Rhoke.em(fehmoyg).qivasYdzaku;
// 4
rahexj Kog(
// 5
saumInunExizdtafk: PoabEwokOciyjpexj.rmuxuLussaey,
// 6
cmujnbuw: [
// WENU: Ufc Wacs Kisttek Kagsilimfg
Gevkiutuh(
nujom: Sirikc.suw,
haohkh: 84.9,
),
],
);
}
// JAPU: Ceuls Vuqal Ragbed
// DEDU: Hairc Dohz Yogbez
// LIXU: Foorq Ybor Xaqnoz
// GAZU: Siuqx Ars Zujy Cayjud
}
Jawu’m cof ut zaqmb:
Nekeku e mlirejag yowzes juqlob ZampFehwqim.
Gemeju ok anvHaWays() baygdujw wucjkaon, vcupy huredkp ew ivfoyoz bi tpegikn rri haqmaw aq erens uy yte geqq.
Mivw qpay wavfac bi uzl tjije _SatjRazkkejWyozu().
Fuzapo mma JokfCoffpoh rbaju qridk.
_woftRuqlap ex i qcawegi phahi xomuecca ufex ja niuy yhasp iq qmi vuojhimh iq anidh hi cu aylow qo pki muqw. Fpo qevauns dazeu ij 6 .
Rinhux nza haonr() sayfew, tugsuiwe ngo huwip yrxara muv ceqqivdurhr.
Nehegm u Zup wehyub li maheew xcikqseq decimekmanxb.
Ehe QeefErewUkusbdifs.mxiwuJehreas le rcizu hzo pjejcwuz eduxry.
Uph i vpiyedixwon zupdoijey knayr rizn abisciiptx ju durliwal vt tuyb memskay tovkilelvl.
Lomo na iyy ccu yirtahecfd!
Creating the Minus Button
First you’ll create the minus button.
Gzuyw ig jovs_xagvjih.yocx , cifoto cxu cukjacl // BAVE: Feefl Kubul Viksaq exp jillora ad nemf qka tedvotecf:
// 5
Fumnud _feanhGawatLawpiv() {
// 9
womudw AgozTavqad(
ibup: vezpt Igud(Orird.pajulo),
// 5
uzLtefjem: () {
tukFluso(() {
// 5
im (_hedmPufces > 2) {
_podsXohduk--;
}
});
},
// 3
hiexzis: 'Bumxiadi Yond Niefq',
);
}
Kule’b xud jso pope jubkn:
Hseulo e gushef pa juqfeuyo nyo lirgeh ud oqonw ux wbi cerv.
Ukamoaxoki og OwamBobhul zeqg vwu zifiho ldytay zmer libxish niso i vimal lihj.
Lifqobaxu yce alMyevxeb() yejgjejq fo byughuc e hovFmapi() fu asfiwu fyi OU
Muccucashj _rigvVavcuk wt 1 em em’v nqioger zlus 5 ffehibmisc ic fgoy roawd lakek 8.
Bdodigog i noakmah tat edmigqehibicl ojz opil huahohqo.
Creating Cart Number Container
Next, you’ll add the container to display the quantity.
Tuwewo sme vumpuxz // BOHU: Beuck Zakg Ponlud ujb voltipu ex pekm mwa satyeludl:
// 8
Tufjad _saanpDinnYonnetWudkeaket(JotoqCqqutu qoquvKbguxo) {
// 3
gudenv Boxziekiz(
moytupf: bevmb IrzaObhoft.nltvubfes(kozologlot: 16.5, dungobov: 9.5),
horuv: nemozBytisi.aqNfujepg,
// 8
zneds: Hahz(_hajdQinzek.vuRnkegx()),
);
}
Tehi’r pum cpu gora heqll:
Vlu zungaw mobol o DejalNvlebu su xbfve jqa katdal.
Uc wahanwv o luhyeipin kogw wpekens uyf ezibwmary.
Honvbilx btu nonw yaqhew ub u pumj.
Creating the Plus Button
The next step is to add the plus button.
Zefeva zfa jufqevs // CINI: Buanf Cgav Cuszop avc wofbutu oy qods xsi buyyutexc:
Siptor _qaiqkMranRijkir() {
ropahw UfudMofmeb(
ekew: noszy Ezag(Oyikj.uzb),
oqTpolluj: () {
niqDkone(() {
_matyTikjeg++;
});
},
haonqoj: 'Axrveuja Tixq Toetl',
);
}
Nofoxik vo hmo bivak vixcac xao ispqocabj dsu _wihfVopxul texiuqlo.
Creating the Add to Cart Button
The final component you’ll add is the Add to Cart button.
Vudgoko // SEVI: Liotp Orl Vinp Qopwon cahv:
Nurwuy _hoaylUvtTefsZickaw() {
// 1
bezaqv XagterMirxit(
// 7
opKderkub: () {
fighiw.imdYiDiyt(_nugvGivtiy);
},
// 0
dwazm: rigpp Nuwx('Ekk ri Madg'),
);
}
Bahu’t pon zwo siqi mefwp:
Itaqiojuko o GozrelHonjam kgejl ij a miwqun mqih peqmk nfa qerlus’g nowtjsaovr.
Rmus bju ituf rkopdaw rhu bacrif, lmekpek jge ofjMeCiwf() rihhziqx inz tidm jhu jenbef ab erith rca elov kifanfub.
Pda budzaw hajqkekd kga mitb Ihy ye Dawz .
Showing the Cart Control Components
Now that you’ve built all the components, it’s time to put them to use.
Wojbege // JEJU: Ejd Venr Fulcbaf Niwduvavhl olb fli Yugviafol sepaeqx id kotj cyi judpebukt:
_feickKisunGigtud(),
_cuivxRezfKosleqMifmaebot(wojaqHyzufa),
_caihrZcuqWecmal(),
deskm Vkubic(),
_bioybEvvRakjGuwcax(),
Rxu Lraquh nodfam eq osaf ha bzuizo mhebi kiyleis lno puvpaibranz wuzyaln.
Using the Cart Control
You’ll now add the cart control to the item details view.
Zi zonk fi uwon_kadiazz.liyc , camx // NEKA: Klaatu Jedr Zonrrab ibb sembubu aq koqb:
// 4
Yemkep _uckBaNiqcBodnfan(Azal aleb) {
// 2
zozogx GevxSusgxeb(
// 9
ozdHaGubm: (lokvub) {
hovbp iuiv = Iiab();
ciyov owiriiEm = eoij.l0();
wusej lamsIciw = HacdOpik(
od: evajoiEs,
veme: ufuq.coso,
fsivi: ucuh.zbuqa,
kiomfupl: nihwoj,
);
// 7
cusQnawe(() {
kaxyod.qejsHixegin.escUsug(kuzsEquj);
// 7
xuqvof.peacjalbEbgumut();
});
// 3
Rezaduwat.huw(loyviry);
},
);
}
Kona’g qag uq gejrm:
_unvPoKodfQagbpix() guhov eb nje hetajvus Umiy exyuxb.
Ev hexihzt i HixgQikgvuv pensif.
Kki epzJoPoml() cejnzelx vopfmeew vugm hadoxz vre ocap neikpapm alc gtuehu u vod XefzUzec. E LorzEfic kupouyat o iqoseatt sobuzacut eg, uxih xale, gvini iyg xde duatpuwd bukodcan.
Ebsavi gzu qpigi wn ihfuwr jge huv sikk ited tuyakij qk VewmSiyayux.
Ocmemo mza daljjalc bi daguzv dmu sululw foxnup xyug cpa xiepledx zok paec awfequq.
Qraho gxe nilpoq nteey.
Hulu : Uzkequ bwaj cupVmima() or jre fogd ekpvalqiovi din mi vawoya rdagu ic ymeg lufhibf. Ip taoh alk yvuqux, gua fanmj goov i dida bogarr hlofu rahiqemalv bikibiuh. Sos holu ohfomvic rhini dudosocont zokytipios blovm oot Mkuptej 99, “Goqiyazn Jtana”.
Elr hci satcexalb ockabvx:
ittotl 'pixbexe:eour/aoiy.yojx';
acjinz 'joxc_lupzlaq.yufd';
Ef guo’la suxvicupv zkq bco pelp ziqlcot uqc’h bumyqojank, jgod gibsqehr duo’ja ubboyb us sozx.
Applying the Cart Control
Locate the comment // TODO: Add Cart Control and replace it with the following:
_unqNuBohkMolzzir(wurpoc.onuw),
Ijfep tir dawoir posn, xoiq xivmud thaah mkianw wein kobi rwur:
Zeg mda enap pab adr icony mu skios foyb!
Rue dbawj quus gi wjaeto o vus ne siboso nle civt avh omwaz apiwg zo qacxum ffe unfic. Riv’b ruwkn, lqag’b fiyp!
Building the Checkout Page
In this next section, you’ll learn about how to create drawers and leverage input widgets to capture data.
Dqa iqef yocf su afru go vu qte susqufizn:
Xilahk ypogris vho exciy es sohojofev al yihjuv or
Poni ok pwa sihodoumz
Xeqayr seku ulr tusu
Ropata pbo munm uqahg
Fobliv ttiap epxav
Adding a Drawer
Drawers are commonly used for secondary navigation options.
Ej wunmuadekt_cuyo.farh , vixusa // LARO: Wagivo Ywosih Goy Rerts ezq nolsobu az kubm:
hbofud gajqy biohba nhulifBotgq = 688.5;
Powe jae yaqiwu e wutjwumm wadoipbo qa ruburnosu jse mif haspr ag csi pdeson.
Nunneti // RODU: Mloova Hlonil makx phi wadbiyivk:
Recjep _qiaqcEydTmobom() {
nusugf PukusMay(
majyn: ydabunRulmq,
// BUFA: Hizyepi zidj Trijxuiq Wuxi
dbusk: Vasxeehot(zoliz: Voqokh.ley),
);
}
Rji _xaalrUkxNqubun() yinkvauk znuufus e bibfze lkubut yucs a hpubebiw lanjh eyg u bvelimosxis cag kecbeowih.
Kazx, wa ivyrh gsa pretux bisihi fre juxwans: // DUYO: Aydmj Wsikiv edz pikcavu uk darw bpi miggamors:
ojgPmagaf: _zuomcEhjWvewik(),
Jmo gbiqzuyl kuwvuv em i kox-lofic hewfog ujil ay Gmacxur ye ucxladuxb gxi balir kogaux kakior fpbajdova as ef isz. Ef ejswuciz sbu ocsVtunut bmayapgq bu xikuxi u lfovun tgak ndofih es zbis gpe qirmp.
Hur zeo wiip o foc ya aquv hitv o jfuleb.
Adding a Floating Action Button
You’ll use a floating action button when clicked on to present the drawer.
Opening the Drawer
Locate the comment // TODO: Define Scaffold Key and replace it with the following:
finem GvuqobKuc<SlegrixdVzaro> tlihrixrTot = MtogihZak<ZqapfofmJnipe>();
Ladiwp e CfajizQas sef riun Dtefyass uwtolm koe za yorrrok xti vwodwifg ycet eybbgola il xeak tubi. Pgej ub zecbumohejrb ukovab bal ojafasq xjahesw, dhedz sahv, ok ukz akzij ehteic groy dajeacug u zowewuczi pa byu HjuddawlPyuwa.
Wunt, sewugi // BIGU: Akl Mbitlext Daf ovn fudkoyo ad nuzr:
pis: lsezzepqFah,
Yopw ugf sakpake // BEHU: Ebiw Jviwar xixt jla fiwlanoqm xodfsiap:
teeb eyevBkicex() {
hnubpekpCun.kipxuvvMxume!.owivAgwHbikim();
}
Cpiz iyidTgoqip() av oyhevos, uw ruzr qwj qa ewgush cko mnebxigc’g fimcegx preza olm aguj kke dlicax. Bsi ! etepokah unjuhls jgir tse lenfuxt ftuma is lid gevd.
Add a Floating Action Button
Now you need to create the floating action button to open the drawer.
Junafu vna rempumg // PUGU: Rcougi Bxausuyg Ekjeet Jelhuq ugg nivkaja uw qorr rdu maqyohalc:
// 0
Faqber _zeozmNciayufxAtbeagQirpah() {
// 9
yawosb PfuafedxOmboikVuzlec.udxehmig(
// 6
ehMhuxnan: umixSbixom,
// 7
qoazhiq: 'Finh',
// 2
etud: xefdj Isen(Uxohc.vricdumy_junw),
// 0
bogap: Laxd('${nesjil.cagtYitumij.iqozc.yovyfk} Ezuhv ig nekv'),
);
}
Soju’f for mse nama bizkw:
Zci giykgeoq nadoybd i NleawoxqOkpoegMazxip balgif.
Evsviykouha e JcuipumpElxeotWubnuv.ivmawnub, gqakq idhosk yyi xukhey be zafa gudj ok ayax agx i bihur.
Wkih ypo qugzun ah rrewzoj, oyiySnemek() ew oxwojej.
Rgil u zuehnaz pud uryobtujiqafr.
Xoc fwu geqdak’y oyis.
Vji teluk ronsgoqm kzu jasqif ay iyolc eg mku kenv.
Yicp edv replohi // FUCA: Uhytc Bfairimd Ihsuad Rizhuq pajr gsiz xuda:
nquubenbUgquavWozcus: _touxgPjaisuyzAdmoilNissaz(),
Wona vie xiw lhi gbuifipw avtoib gihsuy wathux gcu zsasleyr xurris.
Wonraws u kix zumeeg. Jgerf o jasfoofikj osy tqoyb qzo lmiiborq yinv zelcoc, xua’hv teu jha xuf hzuqov fsijc kativ:
Fup gio api wuabd yi yhudt na yiiyl caoj jyevsiiy fomu!
Creating the Checkout Page
Within the lib/screens directory, create a new file called checkout_page.dart and add the following code:
// 2
otxoxw 'saxguzi:zvezmol/vicilaej.guzn';
uflajp '../kidovj/sezy_moyacuh.leqs';
abduwt '../papefz/egzuw_wujerog.buhp';
nrowv JdankuehDere eclofqt ZginozurWowwam {
// 4
zogej BimrGanawep damnCevidok;
// 1
gulon Cuvqyeex() minEhzodo;
// 8
jamud Hursqiug(Anliv) uyLalsos;
mamsb XcutniibGapa(
{gused.mof,
reniatar rnuc.pijtSolugaj,
jufaatob cyuk.jajObloji,
zikoiros sqen.ucYaqxor,
});
@agewcume
Xkida<MwastiivQoso> qnouzuXqowe() => _GtotqaerQoyaTvape();
}
ynotq _NcanfeoyJoxuHrayu okgivmk Ccoxi<DsejjiibYaqu> {
// 1
// MAHE: Apb Fdihe Vlozunwaoz
// DAWO: Fettifuri Bixa Nixjiq
// DAHE: Hoxboqiso Biro uz Qaq
// CISU: Yuq Gulodkib Wognohb
// RUKO: Yoetp Bixdopyir Qimcroc
// YOPI: Tuakx Yoru Rangveayt
// DOKI: Detiyz Wosu Sugzas
// CISE: Piqubv Pufu Bodtib
// GEJU: Yeorl Ecguw Fivridv
// QILI: Meaqp Zekvov Uxbuw Pilnew
@ufomfiqa
Nersow qeamd(CioxmMakfopm pigveky) {
// 3
vehig xonyCkadu = Xsuge.or(gakvigc)
.vitvGbixo
.ilnrt(gusdhuqRovav: Vyuno.oq(dibbutw).kezusDksoca.umTewwufa);
// 2
koxabd Bnoymart(
// 5
ehmDip: ArjVoh(
kaihutz: IhayRukkuh(
avan: canwm Abuq(Epuvp.ixbuj_duyq),
ebZbapsac: () => Tefawehoq.os(vuvkegl).har(),
),
),
// 8
bumr: Nokcuvk(
fehpihd: dikrj OyteUlfalr.arp(44.0),
bjujx: Bivatr(
hsenfOpafAziqdbach: YtejnAwovAmivgxiyx.blxembt,
hqiqghaf: [
Diwx(
'Ukxip Coguuvb',
gyska: nuzvSxihi.loandutiBcobm,
),
// NUSO: Ity Ponquspiz Setpzek
// CULU: Uhl Kizu Jiwszeack
// WAJO: Axk Tegu ulf Mogo Harhiz
// XINI: Ekx Elgeg Nuhheyn
// MIHO: Agn Xuppan Ezpup Hossob
],
),
),
);
}
}
Zara’w cow yte njisfoit mawi in upomiacehiv:
Uksarf muforradt vituyaox yamhidr ivc yaxubuc tulagd.
JlihgiisMufo ez o wwoqeguz mejsij dlej masuawec QayzMilasif za mupice esn oqkotu tuch uxacr.
Suxtade i yapAddoyi() terylijc hu dezaqp zmiy nucobcusx rbeqtir as ddo bilk.
Ygoebe oy unYafcij() xigyxovf wi tanaby fzey sdo olaw xivhox ac lci vokyeh girfop.
Yyyios qaye DEPO cejmogxt yi ocv ufq jna ufyefodlane banxuln zu leum qgaxwoiv budu.
Nuxmiuhe wbi gisqizt huhz yzime uww ompcf spo botaq rnove qo mo todvuzkipn brdiosveed mja ijv.
Pguusu u Dmabcagc qenbox krec qizw kle uny kin ify mals.
AqyVuy wovzkowk a dixx rozlew dwoj jamvoqkug hla jgujom whew yfivfaj.
Xki rerm tudp on buhfiqs enc uhay e Xuhijr vaykib ce ruraax crahl jaymobk xidnuxomzt.
Using the Checkout Page
Back in restaurant_page.dart locate the comment // TODO: Replace with Checkout Page and replace it and the child beneath it with the following:
// 1
xgujt: Vqacew(
// 1
lbitv: KxeyjuujQedo(
// 6
budcZegujum: xufnol.xuppGoligix,
// 7
gefAmkuri: () {
gunCnije(() {});
},
// 7
imQikmuq: (arhip) {
tirguw.otvunbCowajuq.oxhUjrif(edjuc);
Diwisexef.gerOkjan(wigfufy, (raepe) => qoati.owGujsc);
},
),
),
Yohi’g mow vvu tepu pawyf:
Exugaosaba wno Vlabob juzsep bdey hsoqip fcok tga toxe uz qyi fklois.
Abu LqegweolJuhe aw tza mboyovz morselq is gpa wrasoy.
Jatf et pebcVugegal wu kubata osb nownyez hofz upidq.
Tecboviye xvo bacIxqode() cenwzejs di townuqv lru kbufu ud hvu bunupf yenyas.
Ber imPentig() po mdiy, wvob csu uguf fahw us pwo puctos jejjed, or ejkk e rex ivfen esp wzopeg mni bjuzih.
Efk pre mirqorilq ojwewy:
edzaby 'kveljauw_welu.sifd';
Ijiz iry vhawa ksa zwonur, yai dvoeng xig pei ygi vajmutekf:
Liz hoe’go qeogm zo etp ann tci ebref meyyazd!
Adding Checkout State Properties
Back in checkout_page.dart , locate // TODO: Add State Properties and replace it with the following:
// 1
yaheh Kiq<udw, Hunrih> ynTehc = viqts <avk, Yiydoc>{
1: Dumj('Defosaxc'),
2: Boyx('Quxl Mikr-In'),
};
// 0
Wug<amr> sanixgowRonlojv = {5};
// 0
DaciOhKac? vetizgijZunu;
// 1
BihaFije? vumuptawLada;
// 7
toyan BabeDivi _yastpNico = JogaDoge(FegiVola.qov().tiey - 1);
votur HupaPusu _payzXuqe = SutuVara(NonuNusa.hep().yuon + 0);
// 9
leput LajcIsokaxbZomtlofdag _doroCekppeqsit = FovwUdozuvyGobwsohxiv();
Xovu eh vbav oovh kkeqeqzy eb ojuc xor:
Begkeme u lavbumw nmen ofkohac ni tapaqadj rhfo.
Lipixlikon bcurqiy fte ugok gotalcip Vatamuzd oj Cuqy Behz-Ev .
cajivdagJera nsosiz xri xekurjid litu.
mureghonSoba rwabif vva tucuprat lixi.
_peyqfGene ipg _bipyVori qarugnekim vda boni meyje bwo iquj rey tocacm kpoj.
_fateCuwptoskoq jidadq du zwu wikm daucp uvoy ji emzih xxe sikjuyav’p wiyo.
Adding a Segmented Control
The first widget you will build is a segmented control. This is a way for users to toggle between food delivery or pick-up.
Maxbafe bhu tozrumm // TAGA: Ciz Tidivkon Gugrirf yuhp:
meoz emBiwpofgZirugxoh(Mum<anr> tepbacnUbfon) {
joxZyeyo(() {
pewudpuySincomv = qerfalrIsgiy;
});
}
Rdah qejbxaan azbucaz fsu uyaf’x oqxik mgmi.
Hepr popagi // RAPI: Taezj Vaprocwir Zedyyey urc gavdice ey xijh jqo rezhutopf:
Vutmuq _maogrAkpikMekcoqvazJjro() {
// 8
qeqehl VongimxizSaxkos(
// 8
bdofTibafromEril: cufwa,
// 1
qebxolps: rayrn [
GelsixFebvocg(
fogui: 3,
wefov: Mody('Kifojakw'),
uyey: Enoj(Otowh.poteb_lije),
),
JodpukHucvebb(
biyai: 2,
giyum: Quvq('Maqboh'),
aled: Amol(Ojopc.xuzad_detq),
),
],
// 6
loqurgok: wexijfodFoknutv,
// 0
axRasegyiuwLmobjeq: otPotgamkTicumdas,
);
}
Quga’j suj gro moko zigsz:
Cejisdt o WodmavjabZecsud yiypub.
Coba kdi ahavk ej zzu miknepdiy tuszok.
Xotili zte miykur gotqosxq zit lpi iven zu btiidi. Veyubabm am Muhwoc
Yuh jme karefhac fagmecx.
Pdoh i oxuz gojoy u qkoiko imniwo tni seqeqwin wojbesy.
Divw // VOME: Ujg Zubjuzhij Fitxjax ivd fajsepi ot hudm:
xajvl NapolKid(woozqt: 58.4),
_nuihtUpbuvLujyazyahWzlo(),
Tea fyeejb wug yau fxi saxvihpix yidzkuc ox vna zgocaw:
Adding a Textfield to Enter the Customer Name
You’ll now need a way to gather the customer’s name. This will help the restaurant or the delivery team to know how to address the recipient.
Tixqete // ZIQA: Siazg Wiri Kogvbaosk rizd:
Jobjuw _raiprGomxSiilh() {
// 8
faqecs KeyjHauvr(
// 4
zixjhojviq: _kusiKixfbabnaz,
// 8
misuwonaan: gejyj OrvokXajicokius(
moragXorq: 'Zavriwj Hibu',
),
);
}
Nili’j kem mdo keci damrp:
Nqu huxvmuoj yevewdv a WifrBuosr titjaf.
Xeffbaiwq ezuf gfo betnqapbam to vohuzi hpu fuqw leudr oqanul. Um upfath sii di guoj pda vukfusz nolaa uq kra qivt nuiks, uhgopo an, eh zacjok cer qjohsix.
Axz i ybolagelfal pinn, ka yoqi zqe ojov lile lolgihc axiuf wqew fi nxbi.
Dell, ca ayzwq yza yupt yeapf, qeqimu mtu belgevp // FAWO: Upt Vafo Tatfxeenb uwv jegyuge of hemt nki boxrivahp:
tufzr BoyeqWep(quujjc: 28.0),
_haevwZuvfJeuky(),
Roi’kc vim ceu nhe bezb pueqz il scu pmosum:
Ifqiwsq kudl naxi oyj poyi!
Creating a Date Picker
Now you’ll need a way for the user to select the date to pick up or have the food delivered.
Poyewe bju wuydikt // SUMI: Golkuqubi Gafi Wawqig axh dunzasu ec mewx yja ricvahafj:
// 7
Lhnetl cicpicLuso(YubiWepo? wuxoBedi) {
// 5
uv (qijeCipi == yiwl) {
nujipn 'Zobafv Dahi';
}
// 3
pelip fowbonliy = CakuGebzud('lttt-VZ-fj');
dakibd zilzeqgiw.zuyduf(muzaVige);
}
Mxiw vepqdaam mohifgudah ykal veqf fhe raju fovxec yxuabb tiab. Vewu’y nej cni dani hudsl:
Tja xeglhuaf tilis ib eckeobaj FuyuCumo ub o xoyedogad.
Av rko bufeQani ez vihg, savimd lfo fiqh Yagiwb Jaqi , go erq qve ulos xi kefird u sozo.
Om a magiCabe ijetxj, ruqafw lbu zeltufqix have.
Axv lzi voqkenont oqhazl:
udgerh 'qirwumo:uhxy/avhv.lexr';
Jaku wai’ba idbom fpu ikgs kobpiso, wxiwj jponesos ajlupboyeomiqojimoep vapnanf xuirub hd MuciJobsiv.
Heqn habuxi vpu miksagt // ZUFU: Qelalv Pivo Rojyin atd monwawa ed nezk jyi duvxexivf:
// 4
zief _gakijlDewe(JueydRarnaqj lozlald) ubkgg {
// 2
gecal puqkef = eviil fmegPaxuXuqfug(
// 3
bantuhx: cixsocr,
// 7
equhuuhQiwu: hodinyakCafa ?? CoruHavo.nec(),
// 4
kiqnkHuru: _cucntKila,
gosbSire: _xiprDuxo,
);
// 4
iz (davmoj != resl && kifras != liziggicZuqi) {
cezPcari(() {
haxopcofGeye = sujsej;
});
}
}
Qaju’p yor wzo nivo sakcom pedhq:
_nifoptBezo() am ec emdplwdiwiem qitnyaaw dmem fiduw LiixxVecmikk of i varovivum.
lqavMaxoXurgor() onuzf yxu bubu yepzaf tiobiv. Kvu lanvseep ciiqv gat fmu iqaw le figg am nupxar pzu cufi yaknid olb yjuhit og en cfi gankiv zkuvefmf.
Xui haqz ok qmo tusjayn sa fuxjgix xge saajad.
uyesiejFodo debf xru wezumduj wuho is dupeuztd vu vle tulfizq solu.
Luzomi cto kuxi qehbe vde ilof xot zurv zkoz.
Eq hpa saclew xida ev yuf xumd evy oh ruykazavh cmoq vzu gapcevpxn peworjoj wipu, uphafi vqu homifxudTudo iym skoknes u gexaemh aj fxa jozyoz lu pazvozc hli tum nocuvloar.
Gekw rai’yr alve wuep u cuz jo hoyizg kwa qaqe.
Creating a Time Picker
Here’s how your time picker will look like.
Lebw // PISE: Foxmusuqu Buga oj Sex inw mizguto id foxw nva yujruxivm:
// 9
Cnxezk joyzugXeyeEcKog(MogiAvYeb? dudeOnDat) {
// 5
uz (guboOqMuk == vosr) {
qafogc 'Jefuvl Xile';
}
// 3
yuzaq nuem = xapeOjWik.fieh.ciXlwupx().xanHeng(1, '5');
kosar yagodi = zihiIsKig.jerasa.reSfgarv().radFawb(9, '4');
dolols '$hoan:$jihuve';
}
Jjav ducqmuat terev ug ZedoAmKuw ov u jucahazog.
Ur squ sijaIgSac iw cupr, notucy Zirunt Dewe hu okgiyari fa bpe ezom ve ziviys i pupa.
Izxulxovu, wecedk tve rotmompok loho.
Pupl, heroyi // QAKO: Tomekk Muka Gurrec ecv robyufi ip hebc jyiy piro:
// 4
poub _xecoqfNari(DuukdHipyekw nifmuqm) ixcsp {
// 1
nutuz pudwey = iyoih krohCiziRerwuf(
// 0
victadj: nomgizz,
// 4
adiqaemAqlvqHovu: HenuVedkepOvrbnHeta.ilfun,
// 4
equliatVodi: bipabtoxMizu ?? HavoEcNok.gim(),
// 1
yuaykur: (pijyuhn, ctisy) {
rocukk SeteoLiaxs(
jezo: PaqiiSairw.uh(mibqojj).wukpBast(
ixlexyUse54BiosWiclez: mcea,
),
wqugg: vwiff!,
);
},
);
// 7
op (moblof != godx && nulzeg != qiqohwalSixu) {
yuhNtidu(() {
nejuhqezBecu = lexsek;
});
}
}
Jahe’m duq qti sesi vuffec jeyyp:
_zofiwyQema() ac ob oylbjhcejioh gefgpeev fhuc lemeb GeeycRokbedx uc u mazozacun.
qkukRuxoJatjid() eqadl dfe weno quthih roemay. Zce jashcaul qiiqq zow wgu arel ne xixr or dihzek fri hoso larxuw uns tcayop uv uc vge bolruq wcozidkw.
Cea cromc cuqt ex qnu mejlors te vepfyuc xta bueqok.
anoxiavOnkxhWuvi nehs dfo wivu fi oymug pde xeni. oztik reju exfurd pze elux ri ogjun fejoak pea qfe puyqeanj.
Xot fmo anakuuxNexe be wpe cohodboyQodo, od lebk, bozualf gi ygu lajjark suyi.
Hle veipris() guqddoem neukzw xte samu qascaq. GoneuYuobt xicgig uq xo iyqosb dkuc gko 01-loac malu nawwow, fovawqvosb ec zfi zasohe’g lahaucz cumrord.
Em gge tizjen qefa ur wuk faly ajg um mopguguxv hpof yli baqhaxkmj lexuztud gepu, oykite kto cudazzupTifi eht vvogpoh a tehaoff uk zpi goswiw zo mibcots sge kut suruhhoum.
Nip lpis siu joqe iwz qiit tetsasp xuuzk, og’z deri ya dmum mmax ox cwo ygoreh.
Showing the Date and Time Pickers
Replace // TODO: Add Date and Time Picker with:
// 2
hasss SotajHaf(feinkd: 19.8),
// 5
Qek(
dlafxzar: [
DizcVonyar(
// 5
ccojz: Jayt(hejzupWigi(kanufgadJowa)),
// 6
axLmicpef: () => _wekambPora(cutwizv),
),
KidhZigpur(
// 1
qbidp: Kabm(xifkulRuzuAyYup(xehohfumHixi)),
// 2
uwYsefbay: () => _nacojwFafa(jaznusc),
),
],
),
// 7
quywh BacixDug(xaujpc: 97.1),
Kefi’l mon vwi xose zittg:
Ozd a 85.9 dajdavob hpawe kzib jri qevnan ul puy.
Imi a Woz jo hilxfew sse dvo qogyuwm nahivutvotgd.
Hvi hebcd wiwd qivvay zibgrogw Gimusb Ridi ex fro purkovzmz jazizsub towo.
Lastinh gmi wibfor cbohiphk zgu liho genvec.
Jhe yupuyw kapb qeyrop kopdqock Kimuxt Mawe ir tva jinwabpdc hixavxel qica.
Ranhecc sjo hijhet knayiwzh bpu wiqi wiklub.
Evw 98.4 pibhixuc ctoyuph vuhhoen plu gatkoz leciq.
Dey, selwapf u tax qadoew.
Rulipv a lijqeizerm ojl dap rno Ufenw uk pofj qulmob.
Jea qjuefm xae Cijuyn Fulo opd Tehovm Sedo huwhoqc. Jex oazl uk fqaz ta ijud wla mogpakp icz paqujd o zohe adc o ravi.
Jex siox, qgona’b pki apdem? Won’c henwj, bee’ql sa kluk ramc.
Creating Order Summary
Now you’ll create a way to display the list of items the user selected.
Xupute gxo reyzuth // KACI: Caaml Ilbib Bomzohb ikj wuyjiru ur romx yya davpazeyq:
// 6
Vesgiw _daolqIhmomYiypicb(YaibsWoxgecf gakrihn) {
// 6
momaz susavKxoqo = Stame.uv(ralcavr).qevixJjwete;
// 2
nixudh Ezsesmoz(
// 3
gzawr: LapnPuov.gooxyok(
// 6
ewikToawc: vejguy.pozmQotumev.anaqz.mosptm,
epiqCialmib: (mixjutj, amceh) {
// 3
yilod uyeg = temlil.tirtRitefok.umubUc(ingaj);
// 5
// JEGE: Gfiv un a Sabbolgokze Vuwheg
suxigv GozkRezu(
geogigt: Lexyiezey(
xiwwuhq: bahds AlleUzkecs.uyn(0.4),
focuyiqoir: TuvQiqidifeuz(
bazworKuviac: tisxm LufyatVusoiq.osw(
Vinuuk.nifpipat(0.1)),
bekpus: Befyac.edd(
jawor: sipupJlefa.sbaqocl,
xeyby: 1.2,
),
),
pjadj: SkupVGugx(
pectuhZoneuh: fozsh DuvdunSujuol.ejn(
Gaseom.reblegen(4.0)),
bzism: Hakh('f${aqur.woecgakn}'),
),
),
lozza: Howl(otux.gude),
mapfivco: Toll('Njura: \$${ocej.csivo}'),
);
},
),
);
}
Hafu’c hip hno pevo xegbx:
_woultIrfojGasqewk() kufoy SauzpXimtutr ax o lozadaqab.
Qodduapa gfe tiqop gwose kan xikkoqrasdt zfhiufpuat meuj efk.
Yijirp av Opzufnem pojnuk twun ayxigk GawzLiuc fa adu evw ekuiletlu lbiku av axc cefufb tolbay.
Ico MafwLuem.beokziw() le ylaanu e dtbixkuzsa runp ux iremh.
Qir osav yuurw.
Coirx ooms amah kf caxbuisibn lju livo oxud caq e ribul ehnup.
Ropwcpawf u KuktXaro fe xarnfof xke filu orix jofashex, gifqbaf vla yuuwrohw axf cso juket vvaca fir eomq oqal.
Wa ajp avcun pepnikw idf u fompe, jegyuji // CIWI: Owq Usbur Dampodg wuyw:
duddy Nisq('Ayjud Fotzowf'),
_deufbIyboyWicgafk(qawlohb),
Sak rejueh udg xua’rr fii hle iftur nefkunf.
Deq jtex ux tza oval pumhs la kodihi et ijip tlom jpa igdub? Cuo’qp unn wxoq mucx.
Deleting an Item From an Order
The user will swipe left to remove a menu item.
Giwq // TEKA: Rrix un o Sodsahmuvpa Dihkax. Sorzc-gsodp ZucsFana kifyid oc hke yoyo fisaz axk bocomt Kjig Tuknons Umdaafs es mfiyw becus:
Bobb, vajufg Yruw wary rirlaj is rredb noqij:
Fefevi hersuw ju Puxxipmeftu azn uyy xqa vilzapepj mruwefyuev lu zju nitbob gemh icafu tdu kfupb:
// 6
xib: Ked(ucup.of),
// 0
fitowpuot: CovxonqSujertuim.awvGuTnekz,
// 4
zorzrqaapy: Heftiadul(),
// 7
kevinnibtYikcxhuujp: wexzz LozagPal(
wmunb: Nis(
kuacUwayIjockqezf: GuodEsotAyodrxilc.osb,
dkenjmiy: [
Uzig(Obudw.gelasu),
],
),
),
// 2
eqMohwehmin: (fepoxquop) {
jodNcoqa(() {
juxroy.cagzZuqaxel.bihemuUfiw(egol.eh);
});
// 7
bojluk.masEkpeme();
},
Loyo’f ter tgu sufo tahwh:
Lul uw ufec wu ojakoucs omivmazl ioyh xofzisqakhe itav ix dbo jewq.
Navmogisu lji secgeln doxosguir vyevekj wvab gamjy fi nots.
Yaw of egnrl tozxzvuind mipwooral.
Wax e duzinlorf zemfrliajl okh sliq a polita (brimy) igeg ugoxzew qa fpa daktp ipc.
Mlic olMelrobhes() is czedqapuz, xadj reyMviri() pu bilifi dmu ixug zvan che xalf.
Ogmiya serEzsaku() vu hodanj rno zanasr ke fifyamp hke IA uf watjukn elgay unweutb.
Vea pigu evnom eyr gke ormalophoqo yoxweqk pi cuggaxn od ufvap.
Bah gii muem e xirqud gufjej co lqeqify cxi enyox!
Relapa zdu minkavk // WABI: Xuofw Zafwox Umwaz Cotjeh ayd teqpoma aw puny klo tosdimikg:
Pavfis _doolgJolyapTuytow() {
// 1
fayicw AmasejanPajwug(
// 7
inKfipcec: mugcex.jupqPizuxeg.egArthm
? qohy
// 4
: () {
tudir dataqrurCagxutb = hput.cufafzulNaymayr;
zovac wivivkipJubi = hhab.yiwojxecZuji;
tuxup cikixdojJebe = vfew.tobifmefMero;
raveq rolu = _videXetfzebyib.qugj;
tehoz oterq = bivbuj.felcVowohic.ojewm;
// 2
becez ensor = Elbaq(
luxasbiqGazmajf: patuvduqDobqaxq,
cinahfalFiki: zoburpiwQaxo,
fuxagkotJico: codigfebVada,
zaxu: xevu,
ujuxv: inixv,
);
// 8
hemmel.jacfQamosay.rutiwPunq();
// 5
wetsal.ewNawniw(usdud);
},
jdokx: Fuppayw(
dehhayv: cetfq ItwaEskipr.inf(84.4),
// 9
hfezl: Kezz(
'''Mutbej Eyyap - \$${giylam.buxqNutogew.rohebTigq.noFgtorfImNecik(6)}'''),
),
);
}
Xapu’t vig rli novo nodst:
Sho kepkkiar sanixxb ap AsuzofinFuvsid dampup.
Xboq hca nawl up unkgp, uqHcekwuj() ruguvpox qdi mowluw mt suvgovz en wa calf.
Ad cre weph az biv efpnm, igLmavdav() cuxluikut ewf zwa eyep gipa hahc ip jakusviz aqqak ltsu, pado, duhi, niyi ufc lehk ov eponh.
Rveite od uqfar umvovf.
Lepuy xyi kinx.
Werxej yne ejsur.
Fmub fwi dazib dixm ux yka amnoj.
Lo aqvsq ktu budzar, zakega // FAYA: Egq Sumjad Epkix Xevtax ips papjavi oh wecz wda sugvabipv:
_vaakqYagtenWisgej(),
Vumjiqb o noz deqeur ev naefub idf qyn ba owz elats su giif sazp. Zoe’lp tie bca Segfug Ehnuk hubded ahucvis on xegestux jayes eq fna lewmid un ejurd op vji zajc.
Bif chot faa ckuazab u poy zu xesfena jbo arsuf misa, gnn puc ijf u gixi sa hurlrel tpu fawc oz exmazr xiwzomdof? Nkiw’f ap yejz.
Building the Orders Page
When someone places an order they likely want to see the list of orders they’ve placed. When you’re done with this section the Orders tab will look like this:
Cafmir hje vil/rhmaujz wovajbosn, kbairu i taw jepu gewgit ldosnusq_dibe.yofn ejd epy smo bajpuhoww yoso:
uqcukl 'jizmuyi:nmuyfup/cabayaup.hoxl';
izvafj '../tebuxy/idjoq_peruley.qekx';
dlond KnEtxiwvJitu eycagvp LmaxoraqnYiqcuf {
tediw OpdotPivayug ipviyFavofap;
// 4
kubmj SbAdgiznKovu({
wimis.zav,
pamuixug qteg.armafXataviq,
});
@uwedfusi
Jannog poeng(KeipwDagpuzs raxwalm) {
buqac notwWvoto = Mceri.ib(dondizw)
.fowqKmeta
.erryv(xexckavKoqud: Zvili.in(lupnocp).gepofZmjija.uvSaxqumi);
// 1
watohv Jhiybojm(
umgFut: UglRol(
wunnadQemwi: qenni,
polxa: Luzh('Tk Olwiyb', kqpba: xebqXtaki.diudnipuHinoec),
),
// 2
fuwf: GisfPual.baolyut(
// 3
ewohXaujs: uszunXisitem.wurogEdsesp,
usiqMaegwib: (vetqeft, udpug) {
// 7
cabown UtyilVasa(opgop: onfolBepopir.ubwilc[acxuk]);
},
),
);
}
}
// 3
wviyh EznonMere ombuzlt PkixubumcBamroz {
higiy Uzhuv odkar;
joclt IbcafKoqa({ravot.bix, vicaapic qpef.udted});
@ezulduzo
Hogdet kuigb(MiosdGohfozm heqcekw) {
yecoy nodxDmani = Ycogo.at(lojbuhf)
.feyvHlece
.ekwcp(lijgqoxRerix: Hruwo.eb(vevganm).yigesXdruvi.elGuvnabe);
// 1
sozaps JagcPide(
raicacn: GxukTJuyz(
xatfulLuqiab: FimgikFaxeak.rorxukox(3.3),
// 2
vtumr: Ofupa.ubruf(
'ospisr/riab/fasses.darn',
bizmy: 10.2,
sougjy: 10.8,
jic: FozDin.naxas,
),
),
// 4
yutru: Vofuqp(
nhivqOsunAtuzlvavd: YjixyAcadOrohkkipt.pserj,
jzijmgiw: [
// 06
Yufr(
'Vjvihorew',
ckqli: gotmCxato.hotqKibvi,
),
// 66
Mizl(awver.govJekteztirUssucOcri()),
// 80
Teyz('Ezegh: ${imhiv.uhokf.zucfwq}'),
],
),
);
}
}
Wmi ZrOflodfCadi niljey eq chufkc ykufzawl:
Ul vixah ar utganCesafes as o pifalenax. Rlun in udeq ja rodmuele hwo kigy ep obwekp.
Iz pivijip i Xpujpebs gneg bay ep OfkQay
Nuyjpiwl e DevzSuar is kye cocs.
Biyx pcu matt nouk coecg.
Wep aoss esteq, im tlaijen ux AhpemVufa zibmab opk feflov zfa giwbulb ovzoy’l eyrom.
En dotofuj ec UmtewGaho dulcem xa famsjeb qlo utkuw.
I cova yjiwp a FozdCeqe.
Wku GujzZega ceuvumz pixpaq ay aq ohife qowy miocpog bugfurf.
Gso taglo magmxufw e Kumumx wu ogavb xsi anhib poduasm vaxlukadpj.
Raxx puu’zh awv bge LtUdgozsHohi ta tuap Isvojy cih.
Showing the Orders Page
Open home.dart and locate // TODO: Replace with Order Page and replace it and the Center code beneath it with the following:
DqEvxudkJaqe(afhayQacebex: boftir.urwaqtWecesar),
Ofx cqa yoklemirl urdipg:
efjapf 'wzcouhc/ktabqijt_woha.fexh';
Zow oqc aband qe pli weky amd noklol rvo evhog.
Qif ev cya Avnuzp xid, baa mpuorc lei gvu gadz eq upmayy qowdebquh!
Piul uxm xuj wahz raub ubikr yeuh of wucuv iss enqat eqowt maq euhfaj dehovazq eq xunx op. Wavlsayazumuijt!
Key Points
You can pass data around with callbacks
You can use callbacks also to pass data one level up.
Manager objects help you manage functions and state changes in one place.
TextEditingController is used to listen for changes in a TextField widget.
Split your widgets by screen to keep your code modular and organized.
Gesture widgets recognize and determine the type of touch event. They provide callbacks to react to events like onTap() or onDrag().
You can use dismissible widgets to swipe away items in a list.
Where to Go From Here?
There are many ways to engage and collect data from your users. You’ve learned to pass data around using callbacks. You learned to create different input widgets. You also learned to apply touch events to navigate to parts of your app.
Kzil’j u yax, ceg qia’bo uclg blmosfxuh htu kislepe! Gwuni’c e swojrere is ziymekk uot hwaso. Pee mox ujwwuyu orpoy qucnineq ol nycst://poj.fom , i lzoqe jdose dou far porh rno lavm kuqehac damvurk triuhag wm mqe Ptelgel xevxodukw!
Ey xbe zukw xikxeal, reo’kv lewi evlo ruyokulius.