- I-Flutter kunye ne-Jetpack Compose yabelana ngemodeli ye-UI echazayo, esebenzayo, kodwa yahluke ngolwimi, i-ecosystem kunye nokufikelela kwiqonga.
- Qamba iimephu ngokucocekileyo kwiikhonsepthi zeFlutter: i-composables to widgets, I-Lazy lists to ListView/GridView, Canvas to CustomPainter and themes to ThemeData.
- Izakhono zomthonyama ze-Android (umjikelo wobomi, ukukhangela, izixhobo, ukudibanisa) ukudlulisela ngokuthe ngqo kwiFlutter ngokusebenzisa amawijethi, iNavigator, ii-asethi kunye ne-async / ilinde.
- Kwiiprojekthi ze-Android kuphela Ukuqamba kuqaqambile, ngelixa iFlutter igqwesa xa ufuna isiseko sekhowudi enye ye-Android, iOS, iwebhu kunye nedesktop.
Ukuba sele uziva usekhaya ngokubhala ii-UIs ngeJetpack Compose kwaye uyazibuza ukuba kunzima kangakanani ukuya eFlutter, ukwindawo entle. Zombini izixhobo zokusebenza ziyabhengeza, ziyasebenza kwaye zakhiwe nguGoogle, ngoko ke inxalenye enkulu yemodeli yakho yengqondo ithwala phantse enye ukuya-enye. Iiyantlukwano eziphambili zihlala kulwimi (Kotlin vs Dart), isakhiwo seprojekthi kunye nendlela isakhelo ngasinye sithetha ngayo kwi-Android ephantsi (kwaye, kwimeko kaFlutter, i-iOS, iwebhu kunye nedeskithophu) iileyile.
Esi sikhokelo sibhalelwe ngokukodwa iJetpack Compose abaphuhlisi abafuna ukuqonda iFlutter nzulu, ngaphandle kokuthengisa i-fluff. Uya kubona indlela iikhonsepthi eziphambili zemephu phakathi kwehlabathi ezimbini: i-compostables vs widgets, modifiers vs iparameters zomakhi, Lazy layouts vs ListView/GridView, Canvas vs CustomPainter, Navigation Compose vs Navigator, khumbula vs StatefulWidget nokunye. Siza kuqhagamshela imvelaphi yakho ebanzi ye-Android (Iimbono, umjikelo wobomi, izixhobo, iinjongo, umsebenzi ongasemva) kunye nezinto ezilingana neFlutter ukuze ijiko lokufunda lizive ngathi linyathelo elisecaleni kunokunyuka.
Ukusuka kwiJetpack Compose ukuya kwiFlutter: apho ubuchule bakho bugqithiselwa khona
I-Flutter sisikhokelo se-UI sikaGoogle sokwakha usetyenziso lweqonga usebenzisa ulwimi lweDart, ngelixa iJetpack Compose sisixhobo se-UI sanamhlanje se-UI ye-Android esebenzisa i-Kotlin. Ngaphantsi kwe-hood bajolise kumaxesha ahlukeneyo okubaleka, kodwa ngobuchule bokwakha babelana ngengcamango enkulu efanayo: chaza i-UI njengomsebenzi karhulumente, vumela isakhelo sifumanise ukuba nini kwaye njani ukuzoba kwakhona.
Kwi-Jetpack Qamba ucinga ngokwemigaqo yemisebenzi edibanisayo, izilungisi kunye nokuphindaphinda; kwiFlutter ucinga ngokwewijethi, iiparamitha zomakhi kunye nokwakha kwakhona. Ngaphandle kwamagama ahlukeneyo, indlela yokuziphatha iyafana ngokumangalisayo: wakha umthi wezinto ze-UI, indawo nganye ayinakuguqulwa, kwaye xa imeko itshintsha isakhelo sihamba loo mthi kwakhona ukuvelisa ujongano oluhlaziyiweyo.
Omnye umahluko ophambili kukuba iFlutter liqonga elinqamlezayo ngoyilo. I-codebase ye-Dart efanayo inokujolisa kwi-Android, iOS, web, Windows, macOS kunye neLinux. Ukuqamba kuyanda ngaphaya kwe-Android (umzekelo kunye ne-Compose Multiplatform), kodwa ibali likaFlutter lezixhobo ezininzi likhule ngakumbi kwaye liyanamathelana ngoku, yiyo loo nto amaqela amaninzi e-Android-eyokuqala eyijonga xa efuna ukuthumela ngenqanawa kwi-iOS okanye kwidesktop.
Ukuqonda kwakho iqonga le-Android ngokwalo kusabaluleke kakhulu kwiiprojekthi zeFlutter. Nangona i-UI layer i-Dart ecocekileyo kunye namawijethi, i-Flutter ixhomekeke kwi-Android (kunye ne-iOS) yeemvume, ukulungiswa kwenkqubo, ii-API zeqonga, izaziso, umsebenzi wangemva kunye nezinye izakhono ezininzi, ezifumaneka ngeeplagi kunye neziteshi zeqonga. Oko kuthetha ukuba yonke intuition owakhe malunga nendlela i-Android eziphatha ngayo ayichitheki - ihambisa umaleko omnye ezantsi.
Imodeli ye-UI echazayo: iicompostables vs widgets
Zombini iJetpack Compose kunye neFlutter zisebenzisa imodeli ye-UI echazayo: uchaza "yintoni" i-UI kufuneka ijongeke njani kwimeko ethile, hayi "indlela" yokuguqula iimbono inyathelo ngenyathelo. Endaweni yokufowunela iisethi kwiimboniselo, uyawakha kwakhona umthi wakho xa imeko itshintsha kwaye uvumele isakhelo sahlukane kwaye sidwebe kwakhona ngokufanelekileyo.
KwiJetpack Compose, izinto ze-UI ziyimisebenzi edityaniswayo echazwe ngayo @Composable, rhoqo iqwalaselwe nge Modifier. Iqhosha linokuba Button(onClick = ..., modifier = Modifier.padding(16.dp)). Isixokelelwano sesixokelelwano sihombisa okanye senza into edibanisayo ngaphandle kokutshintsha uhlobo lwayo olusisiseko, kwaye Ukuqamba kusebenzisa ukudibanisa ukuhlaziya kuphela iindawo zomthi ezitshintshileyo zamanqaku.
KwiFlutter, izinto ze-UI ziziwijethi-izinto ezicacileyo zeDart ezichaza uqwalaselo. Kananjalo aziguquguquki kwaye zicwangciswe emthini, kodwa endaweni yokugqithisa isilungisi uqhele ukuphumelela ubeko okanye isitayile iimpikiswano ngokuthe ngqo usebenzisa iparamitha zomakhi, okanye usonga iwijethi kwezinye iiwijethi zoyilo. Umzekelo, ungabhala Padding(padding: EdgeInsets.all(16), child: ElevatedButton(...)) ukufumana umphumo ofanayo.
Umjikelo wobomi bazo zombini ii-compostables kunye namawijethi aphila ixesha elifutshane ngabom kwaye awanakuguqulwa. Bahlala kuphela de igalelo elitsha lifuna ukuba batshintshwe; ayizami ukulawula ubomi bayo okanye ukuziguqula ngokuthe ngqo. Lutshintsho lwengqiqo olusuka kwihlabathi lakudala lokuJonga i-Android apho iimbono zizinto ezihlala ixesha elide, ziphinde zisetyenziswe kwaye zitshintshwe ekuhambeni kwexesha, yiyo loo nto indlela yokucinga yakho yoBumba iziva yendalo kwiFlutter.
Ngaphantsi kwehood, uyilo kuzo zombini izikhokelo lulandela ipateni efanayo eqhutywa ngumzali, esekwe kwisinyanzelo. Umzali uyazilinganisa, udlula imiqobo, abantwana bakhetha ubungakanani ngokuhlonipha ezo zithintelo, kwaye umzali ubeka abantwana bakhe. KwiFlutter uyakubona oku kuvele ngqo njenge BoxConstraints; kwi-Compose iphathwa kumiliselo lwe-MeasurePolicy. Kuzo zombini ezi meko, abazali banokubabekela imiqathango abantwana—iwijethi ayinakusuka nje ikhethe nabuphi na ubukhulu okanye indawo abayithandayo.
Ukwakha i-app: indawo yokungena, isikafula kunye noyilo
Kwi-Android ngeCompose, indawo yakho yokungena idla ngokuba yi Activity (kaninzi a ComponentActivity) apho ufowuna khona setContent ukusingatha izinto zakho ezinokuqanjwa. Ukusuka apho wakha umthi oxutywayo, oqhele ukuqala nge MaterialTheme kunye nomphezulu okanye isikafula esichaza uyilo lwakho olukwinqanaba eliphezulu.
KwiFlutter, indawo yokungena yiDart main umsebenzi ofowunayo runApp ngengcambu yewijethi yesicelo sakho. Loo ngcambu iqhelekile a MaterialApp or WidgetsApp iwijethi, emisela indlela, imixholo, ukwenziwa kwalapha ekhaya kunye nesiseko somqhubi wenqanawa. Eyokuqala “ikhusi” oyibonisayo ihlala isebenzisa i Scaffold widget, edlala indima efana kakhulu Scaffold kwiMaterial 3 Qamba: ikunika ibha yeapp, umzimba, iqhosha lesenzo elidadayo, iidrowa njalo njalo.
Ngombhalo olula kunye nomxholo omileyo, Ukuqamba kunokungagqibekanga kumxholo wokusonga-ubungakanani obuthelekisayo kumxholo wangaphakathi-nangona uninzi lweewijethi zeFlutter zisilela ekuthatheni indawo ekhoyo ngakumbi ngaphandle kokuba kunyanzeleke. Umzekelo, ukuba ubeka i Text ihlanganiswe ngaphakathi kwikholamu, ayizukuzalisa ububanzi ngokuzenzekelayo. KwiFlutter, a Text ngaphakathi a Column inokuziphatha ngendlela eyahlukileyo ngokuxhomekeke kwimiqobo yomzali wayo. Ukubeka umxholo kwiFlutter, uyakuhlala usonga izinto kwi Center widget, okanye sebenzisa iiwijethi zokubeka njenge Align, Row, Column, yaye Expanded kudityaniswe neempawu zolungelelwaniso.
Imephu yoyilo lomgca phantse ngokugqibeleleyo: Ukuqamba kuye Row kwaye Column, kwaye ngokunjalo iFlutter. KwiFlutter upasa abantwana njenge List<Widget> kunye nokulawula izithuba kunye nolungelelwaniso neepropati ezifana MainAxisAlignment kwaye CrossAxisAlignment. Kwi-Compose, uthembele kwi horizontalArrangement, verticalArrangement, horizontalAlignment kwaye verticalAlignment. Indlela eluncedo yokucinga ngayo: iipropathi eziphela “kwi-Arrangement” kwimephu ukuya kwi-axis ephambili ye-Flutter, kunye nezo ziphela “kuLungelelaniso” kwimephu kwi-axis enqamlezayo.
Xa ufuna isalamane okanye uyilo oludityanisiweyo, iindlela zokujonga nazo zilungelelaniswa ngokwengqiqo. Kwi-Android XML unokufikelela kuyo RelativeLayout okanye umxube onesidleke we LinearLayout kwaye FrameLayout. Xa uqamba ungaqamba Row, Column kwaye Box (okanye ubhale uyilo olulungiselelweyo). Kwi-Flutter i-analog yi Row, Column kwaye Stack idityaniswe nabantwana abamiselweyo kunye neenketho zolungelelwaniso. Imodeli yakho yengqondo yokulungelelanisa izinto ezihambelana nomnye ihamba inqumla phantse ingatshintshanga.
Amaqhosha, igalelo kunye nentsebenziswano
KwiJetpack Compose, ukwakha iqhosha ngokuqhelekileyo kuthetha ukusebenzisa Button okanye enye yezinto ezahlukeneyo ezahlukeneyo, leyo phantsi Material 3 ukusombulula kuphunyezo oluthile ezifana FilledTonalButton. Ubonelela nge onClick lambda kunye nesimbo sokuzikhethela, rhoqo ngeparameters ezifana colors okanye izilungisi zepadding, ububanzi kunye nolungelelwaniso.
KwiFlutter, ukulingana kusebenzisa iiwijethi ezifana FilledButton, ElevatedButton, TextButton or OutlinedButton. Ngamnye uthatha i onPressed callback kunye a child widget-kaninzi a Text. Unokuzilungelelanisa ngokudlula i style ngokusebenzisa ButtonStyle okanye usebenzisa umxholo wehlabathi jikelele, okuvumela ukuba uhlengahlengise umbala, imilo, ukuphakama kunye nobukhulu kusapho lonke lweqhosha.
Ukuphatha izijekulo, Ukuqamba kuxhomekeke kwizilungisi ezifana Modifier.clickable kwiimeko ezininzi, kodwa ungaphinda uhlele phantsi kwizichongi ezikhethekileyo xa kufuneka. Ucinezelo olude, utsalo kunye nezijekulo zesiko ngokuqhelekileyo zidityaniswa ngokusetyenziswa kwe-APIs yesilungisi esizinikeleyo kunye nemithombo yonxibelelwano.
I-Flutter ibonisa ngokucacileyo GestureDetector iwijethi oyisongayo kuyo nayiphi na into engenankxaso yentshukumo yomzimba. Inika uluhlu olubanzi lwee-callbacks: onTap, onDoubleTap, onLongPress, onVerticalDragStart, onVerticalDragUpdate, onHorizontalDragEnd kunye nabanye abaninzi. Iiwijethi ezifana ElevatedButton sele eveze i onPressed ipropathi, kodwa kwizinto ezilungiselelwe ngokupheleleyo ze-UI onokuzisebenzisa GestureDetector okanye iwijethi zomgangatho ophezulu ezinje InkWell impendulo Material ripple.
Ukufakwa kombhalo kwiFlutter ilawulwa nge TextField or TextFormField, isimbo sakhe esihambelanayo Ukuqamba TextField kwaye OutlinedTextField izinto ezinokudityaniswa. Uqwalasela iingcebiso, iilebhile, iimpazamo kunye nemida usebenzisa i InputDecoration iyafana nendlela oyisebenzisa ngayo TextFieldDefaults okanye iparameters kwi Qamba imihlaba yokubhaliweyo. Njengaku Qamba, udla ngokubonisa imiyalezo yemposiso ngokusebenza ngokutshintsha imo kunye nokwakha kwakhona umhombiso kunokujija iimboniselo ngesandla.
Uluhlu, iigridi kunye nomxholo oskrolayo
I-Jetpack Compose inikezela ngeendlela ezimbini eziphambili zoluhlu: elula Column/Row ngokuphindaphinda iingqokelela ezincinci, kunye LazyColumn/LazyRow/LazyVerticalGrid/LazyHorizontalGrid kuluhlu olukhulu okanye oluguqukayo. Izikhongozeli ezinobuvila ziqamba kuphela into ebonakalayo, egcina ukusebenza kuphezulu xa ujongana namawaka ezinto.
I-Flutter ilandela indlela enye encinci-vs-enkulu kodwa inewijethi ezahlukeneyo. Kuluhlu oluncinci olungena kwiscreen ungasebenzisa nje i Column kwaye imephu idatha yakho ku children. Kuyo nayiphi na into eskrolayo, ufikelela kuyo ListView or GridView, kunye nabakhi abakhayo abadala abantwana kuphela xa kuyimfuneko.
Ipateni eqhelekileyo kwiFlutter yi ListView.builder, esipilini Ukuqamba kaThixo uluhlu izinto ukonqena DSL. Ubonelela nge itemCount kunye itemBuilder buya utsale umnxeba; I-Flutter ibiza loo makhi ngesalathiso ukusuka ku-0 ukuya itemCount - 1 xa kuvela into entsha. Ngaphakathi umakhi ungabuyisela phantse nayiphi na iwijethi-ukusuka elula ListTile ngokubhaliweyo kunye ne icon ukuya kubunzima, uluhlu lwemigca elungelelanisiweyo.
Kwiigridi, Qamba's LazyVerticalGrid kwaye LazyHorizontalGrid imephu eya kwiFlutter's GridView i widget. Endaweni yokubala ikholamu ngqo kwigridi, iFlutter ihlala isebenzisa umthunywa onje SliverGridDelegateWithFixedCrossAxisCount or SliverGridDelegateWithMaxCrossAxisExtent ukulawula indlela iiseli ezibekwe ngayo. Aba bathunywa bafaka imigaqo efana "nenani leekholamu" okanye "ubukhulu beeseli ezinobubanzi," obufana nomoya kwiiparamitha zobungakanani begridi oyisebenzisayo kuBumba.
Ukuziphatha kokuskrola kukwayafana kuzo zombini izixhobo zezixhobo. Izintlu zokonqena zokuqamba ziza kunye nokuskrola kubhakiwe; awuzisongeleli kwizikhongozeli ezongezelelweyo zomqulu. KwiFlutter, uluhlu oluninzi kunye neewijethi zegridi ngokwazo zizinto ezisongelwayo, kodwa kumxholo omnye, ongaphindiyo ofanele ukuskrola ongawusebenzisa. SingleChildScrollView. Ukwakha amaphepha anokusongeka ngokwesiko emva koko iba ngumcimbi wokuzalela okanye ukuqulunqa iislivers zamatyala osetyenziso olukwinqanaba eliphezulu.
Iipateni ze-UI eziguqukayo neziphendulayo
Ukuqamba kukunika izicwangciso ezininzi zoyilo oluphendulayo: uyilo lwesiko, BoxWithConstraints, WindowSizeClass kunye nethala leencwadi leMathiriyeli 3. Ezi zikuvumela ukuba utshintshe ukwakheka kwakho ngokusekelwe kwindawo ekhoyo, ukuma kunye nodidi lwesixhobo, kwaye unokuzixuba ngokuxhomekeke kubunzima beprojekthi.
I-Flutter ayizami ukubonisa ezo APIs ngokuthe ngqo, kodwa umbono osisiseko uyafana: jonga imiqobo kunye neempawu zesikrini, emva koko udibanise uyilo lwakho. Izixhobo ezibini eziphambili LayoutBuilder kwaye MediaQuery. LayoutBuilder siwugcine BoxConstraints phantsi ukuze utshintshe okanye uhlengahlengise iiwijethi ngaphezulu kobubanzi okanye ubude obuthile. MediaQuery Iveza ubungakanani besikrini, ukuqhelaniswa, ukukhuselwa kunye noxinaniso lwepixel kwiindawo zokuphumla ezikwinqanaba eliphezulu.
Endaweni yokujolisa kwimaphu yomntu-amnye phakathi kwezisombululo eziguquguqukayo zeCompose kunye neFlutter, kusebenza ngakumbi ukucinga ngokweemfuno zakho zoyilo. Nje ukuba uyazi ukuba i-UI yakho kufuneka ilungelelanise njani kuzo zonke iifowuni, iitafile kunye needesktops, ungabonisa loo ngqiqo nokuba ngeCompose's. WindowSizeClass kunye noyilo oluguquguqukayo okanye ukunyanzeliswa kweFlutter kunye ne-media-driven branching. Ukucinga okufanayo koyilo-ii-APIs ezahlukeneyo.
Ulawulo lwelizwe: khumbula vs StatefulWidget nangaphaya
Jetpack Qamba iivenkile ephemeral UI karhulumente usebenzisa remember kunye nabanini karhulumente abafana mutableStateOf, edla ngokudityaniswa ne ViewModel kunye namacandelo oyilo lwelizwe elihlala ixesha elide. Xa imeko itshintsha, ukuphinda kuvele kwakhona kwenzeka kwaye izinto ezifanelekileyo ezinokuhlanganiswa zifumana amanani amatsha.
Ibali likaFlutter likwinqanaba elisezantsi lijikeleza StatefulWidget kunye nenxulumene nayo State into. Uchaza iwijethi efuna ukubamba ilizwe ngokwandisa StatefulWidget, emva koko uphumeze okwahlukileyo State<MyWidget> iklasi ukugcina imihlaba eguquguqukayo. Nanini na xa uhlaziya ezo ndawo, uyafowuna setState(), ephawula loo nxalenye yomthi wewijethi njengento engcolileyo kwaye ibangela ukwakhiwa kwakhona. Kweli nqanaba lifana kakhulu nokugcina imo yokuqamba nge remember kunye nokungasebenzisi imihlanganiselwa xa ixabiso litshintsha.
Ukufumana usetyenziso olunzima ngakumbi, iFlutter incike kakhulu kuluntu kunye neepateni zeqela lokuqala: Provider, Riverpod, Bloc, Redux-style store and more. Ezi zisebenza njengee-analog ze-Android yakho ye-architecture stacks: i-ViewModel + LiveData/Flow + yokugcina kwiiprojekthi zokuqamba. Babeka embindini ingqiqo yeshishini kwaye baveze imilambo esebenzayo yedatha eqhuba ukwakhiwa kwakhona kwewijethi. Ukusuka kwimvelaphi yokuqamba, uya kufumana uninzi lwale pateni uqhelekile nokuba ii-APIs zohlukile.
Inqaku elinye elihlala limangalisa abaphuhlisi be-Android kukuba omabini amawijethi angenammiselo kunye nengxelo kwiFlutter yakheka rhoqo-ngokunokwenzeka isakhelo ngasinye ngexesha loopopayi. Umahluko awukho malunga nokuphinda kwakhiwe amaxesha amaninzi kodwa malunga nalapho imo eguqukayo igcinwa khona: StatefulWidget ikunika iqabane State into esindayo iphinda yakhiwe, kufana nokuba njani remember ivumela amaxabiso ukuba aphile kwakhona xa kuphinda kuqulunqwe kwakhona.
Umzobo, oopopayi kunye nepolishi ebonakalayo
Ukuba ukhe wasebenza ngokuthe ngqo nge-Android Canvas kwaye Drawable, Qamba's Canvas ukudibanisa mhlawumbi uvakale ngokuthe ngqo. Ibonelela ngendlela echazayo yokuzoba iimilo, imifanekiso kunye nesicatshulwa e-Kotlin, efihla umsitho onyanzelekileyo wezimvo zesiko.
I-Flutter iveza umphezulu ofanayo womzobo nge Canvas I-API, ifunyenwe nge CustomPaint kwaye CustomPainter. Uphumeza a CustomPainter iklasi apho ubhala ngaphezulu i paint indlela yokuzoba kwi-canvas usebenzisa Paint izinto, iindlela, iinguqu njalo njalo. Emva koko uncamathisele loo mzobi a CustomPaint widget. Ngaphantsi kwe-hood zombini Ukuqamba kunye neFlutter zixhomekeke kwi-injini ye-Skia, ke iiprimitives-imigca, iindlela, i-shaders-zikhangeleka ziqhelekile kunikezelo lwe-Android lwe-2D.
Ukwenzela oopopayi, iFlutter ingqiyama kwinkqubo yopopayi ecacileyo eyakhelwe macala onke AnimationController, Animation<T> kunye ne Tweens, kunye neseti etyebileyo yeewijethi ezinopopayi. Uqinisekisa umlawuli (ngokuqhelekileyo nge SingleTickerProviderStateMixin ye vsync), chaza iCurvedAnimations okanye iTweens ezimaphu 0-1 inkqubela kumaxabiso edomeyini, kwaye emva koko uwafake kwiwidget njenge FadeTransition, ScaleTransition, AnimatedBuilder okanye iiwijethi ezifihlakeleyo ezifana AnimatedContainer. Inkqubo yoopopayi ikwaveza AnimationStatus ukufowuna ukusabela ukuqala, ukugqitywa okanye ukubuyisela umva.
Jetpack Compose's oopopayi APIs zibhengeza ukusuka phezulu ukuya ezantsi, kunye nemisebenzi efana animate*AsState, iinguqu, kunye nokubonakala okuphilayo. Kunokuba ulawule abalawuli ngesandla kwiimeko ezininzi ezixhaphakileyo, uchaza amazwe ekujoliswe kuwo kunye nesakhelo siqhuba uguqulelo ekuhambeni kwexesha. Xa ufuna ulawulo lwe-bespoke ngakumbi, usenokufikelela kwimigangatho esezantsi yokuqala, kodwa indlela eqhelekileyo imfutshane ngakumbi kune-XML yakudala ye-Android okanye ikhowudi yopopayi efunekayo.
Ngokwengqikelelo, usebenzisa zombini izixhobo zesixhobo ngendlela efanayo: gcina iiwijethi/izinto ezikhonjiswayo zikhaphukhaphu kwaye zinyulu, ixesha lokutyhala-ixabiso elahluka-hlukileyo ngazo, kwaye uvumele isakhelo siphathe ukutolikwa kunye nokungasebenzi. Njengomphuhlisi wokuqamba, ukucaca okongezelelekileyo kweFlutter's AnimationController Isenokuziva isisikolo esidala ekuqaleni, kodwa ikuthenga ngokucokisekileyo ulawulo lwexesha, iigophe kunye neokhestra.
Isimbo, umxholo, iifonti kunye ne-asethi
Ii -apps zanamhlanje zihlala okanye zifa kwipolishi, ke zombini iFlutter kunye neCompose igxininisa kakhulu kwimixholo kunye nesimbo. Qamba ukusetyenziswa MaterialTheme kunye noyilo lwemibala, i-typography kunye neenkcazo zemilo, kwaye ungenza indlwane imixholo ukukhuphela ngaphezulu amaxabiso eemitha ezisezantsi-kuquka ukunyanzela ukukhanya okanye imiphezulu emnyama kwimimandla ethile.
KwiFlutter, ukulingana ThemeData idluliselwe kwi MaterialApp or Theme iiwijethi. Uchaza imibala ephambili, ukukhanya, ukuchwetheza kunye nemixholo ethile efana elevatedButtonTheme, textButtonTheme, appBarTheme kunye nokuninzi. Ungayibhala ngaphezulu imixholo yasekhaya ngokusonga imithi engaphantsi Theme iiwijethi ezikopa umzali kwaye zilungisa iindawo ezithile. Imowudi yokukhanya kunye nobumnyama inokutshintshwa kwinqanaba le-app ngokubonelela theme kwaye darkTheme kunye nokulawula themeMode.
Isimbo sokubhaliweyo ngummandla oqhelekileyo: ku Qamba mhlawumbi ugqithise iimpawu ezilula ngokuthe ngqo Text okanye unikezelo a TextStyle into. I-Flutter ibonakalisa oku nge Text widget eyamkela i TextStyle ngokusebenzisa yayo style Ipharamitha. TextStyle igubungela usapho lwefonti, ubungakanani, ubunzima, isithuba soonobumba, ubude bomgca, ukuhombisa nokunye. Ungayichaza imixholo yokubhaliweyo yehlabathi kwi ThemeData.textTheme kwaye zibhekiselele kuyo yonke indawo, njengokuba ungasebenzisa i-typography ukusuka MaterialTheme ku Qamba.
Iifonti kunye nemifanekiso ziphathwa nge-asethi kunesiqhelo se-Android /res ulawulo umthi. I-Flutter ayinyanzelisi uyilo oluthile lwesiqulathi seefayili; uxela ii-asethi pubspec.yaml kwaye ke ireferensi kubo kwikhowudi. Imifanekiso idla ngokulayishwa Image.asset(), esisombulula kwibhakethi echanekileyo yoxinaniso ngokusekelwe devicePixelRatio. Iiphikseli ezinengqondo zidlala indima efanayo dp kwi-Android, ukuxinana kwepixel yomzimba kude.
Iifonti zesiko, Ukuqamba kukuvumela nokuba upakethe izixhobo zefonti okanye uzitsale ngexesha lokuqhuba usebenzisa ababoneleli abanje ngeeFonti zikaGoogle, emva koko ubafake ucingo. FontFamily kunye nokuchwetheza. I-Flutter isebenzisa phantse ipateni efanayo: beka iifayile zefonti kwifolda ye-asethi, zidwelise kuyo pubspec.yaml, kwaye emva koko ubhekisele kusapho lwefonti ngegama TextStyle. Ukuba ufuna iifonti ezithatyathiweyo ngexesha lokubaleka, kukho edumileyo google_fonts iplagin eveza imisebenzi yeDart ethiywe ngegama lefonti-umz GoogleFonts.robotoTextTheme()-ukuzifaka ngokukhawuleza kumxholo wakho.
Zombini i-ecosystems ziphatha imitya kunye nokubekwa kwendawo njengenkxalabo yodidi lokuqala, nangona iFlutter ingenalo ukulingana ngokuthe ngqo kwizixhobo ze-XML ze-Android. Endaweni yoko, eyona ndlela ilungileyo kukugcina iinguqulelo zikulo .arb iifayile kwaye uzifake ngeengcingo ngesixhobo sokwenza indawo yeFlutter. Ufikelelo ke lwenzeka ngeeklasi ezenziweyo zeDart, eziphantse zifane nokusetyenziswa R.string izichazi kwikhowudi ye-Android.
Iingqikelelo zeqonga le-Android ngelensi yeFlutter
Ngaphaya kwe-UI, omnye weyona mibuzo mikhulu yokuQamba abaphuhlisi banayo yindlela iimephu zabo zolwazi lwe-Android kuyilo lweFlutter. Ngethamsanqa, ezininzi zeengcamango eziphambili-imisebenzi, i-lifecycle, iinjongo, umsebenzi wemvelaphi, izibonelelo, i-networking-zinabalingani abacacileyo, nokuba i-API yomhlaba ibonakala ihluke.
Kwi-Android, Activity kwaye Fragment zizikrini zakho eziphambili kunye nezikhongozeli; kwiFlutter yonke into iyiwijethi, kwaye ukukhangela kwenzeka nge Navigator kwaye Route izinto. Indlela ihambelana nomsebenzi okanye iqhekeza, kodwa kuhlala kukho ukusingathwa okukodwa Activity kwi-Android efakela injini yeFlutter. Utyhala kwaye upapashe iindlela kwisitaki seNavigator, nokuba kungeendlela ezinegama ezichazwe kuyo MaterialApp okanye ngokusebenzisa ukwakhiwa ngokuthe ngqo PageRoute imizekelo efana MaterialPageRoute.
Ukufowuna komjikelo wobomi be-Android (onCreate, onStart, onResume, njl.njl.) awunazo iigwegwe enye kwikhowudi yeFlutter, kodwa unokujonga umjikelo wobomi beapp WidgetsBindingObserver. Ibhenca amazwe anje resumed, inactive, paused kwaye detached, ehambelana noko kubonakalayo, imvelaphi kunye nezigaba ezitshatyalalisiwe ze-Android. Xa ufuna i-hook ephantsi yomgangatho wobomi bolawulo lwezixhobo, uhlala uziphumeza kwicala lemveli le-Android FlutterActivity okanye iplagin, hayi kwi Dart.
Iinjongo zidlala iindima ezimbini kwi-Android: ukukhangela kwi-app kunye nonxibelelwano lwe-app. Njengoko sele kukhankanyiwe, iFlutter ayinayo i-API yokukhangela esekwe ngenjongo—iNavigator ithatha indawo ngokupheleleyo yaleyo ingaphakathi kwihlabathi leDart. Kwimisebenzi ye-cross-app (ukwazisa ikhamera, isikhethi sefayile, ukuphatha iinjongo zokwabelana), usebenzisa ngokubanzi iiplagi ezisonga iifowuni eziyimfuneko ze-Android (kunye ne-iOS). Ukuba akukho plugin ekhoyo, ungabhala eyakho usebenzisa i-MethodChannels ukuthetha phakathi kweDart kunye nekhowudi yemveli, ukudlulisela iinjongo kunye neziphumo njengemiyalezo.
Ukuqonda kwakho umsebenzi ongemva kunye nokuthunga kukwadlulisa, kodwa ezokuqala zikhangeleka zahlukile. I-Android ikutyhalela ukuba uhambise inethiwekhi kunye ne-disk I / O ngaphandle kwentambo ephambili usebenzisa i-coroutines, i-AsyncTask (ilifa), i-WorkManager, i-JobScheduler, i-RxJava njalo njalo. I-Dart, ngokuchaseneyo, isebenzisa i-loop yesiganeko esinomsonto omnye kwindawo yodwa, kunye ne-async / ilindele i-I / O kunye neendawo ezizimeleyo zomsebenzi onzima we-CPU. Nantoni na endiyibophelelekileyo/ndiyibophelelekile, phawula nje imisebenzi yakho async, await umsebenzi kwaye uvumele iluphu yesiganeko igcine i-UI iphendula; kwimisebenzi enzima ye-CPU ujikelezisa i-avante kwaye unxibelelane ngomyalezo odlulayo endaweni yenkumbulo ekwabelwana ngayo.
Kwinethiwekhi yangaphambili, iFlutter idumile http iphakheji idlala indima efana ne-OkHttp + Retrofit kwiimeko zokusetyenziswa ezisisiseko. Ifihla umsebenzi omninzi we-socket ephantsi kwaye idibanisa ngokwemvelo kunye ne-async / ukulinda. Ngeemfuno ezintsonkothileyo unokunyuka ukuya kwiipakethi ezinje dio, kodwa ipateni esisiseko ihleli: yenza umnxeba we-async, linda isiphumo, hlaziya imeko nge setState() okanye umphathi wakho welizwe omkhethileyo, kwaye wakhe kwakhona iiwijethi ezichaphazelekayo.
Iiplagi, ugcino, iFirebase kunye nezixhobo
Kwi-Android uqhele ukubhengeza ukuxhomekeka kwi-Gradle; eFlutter ubabhengeza kubo pubspec.yaml kwaye uzilande kwi-pub.dev. Iifayile zeGradle phantsi kwe android/ Ifolda yeprojekthi yeFlutter ubukhulu becala yeyokudibanisa iqonga elithile okanye xa ufuna amathala eencwadi esintu-imihla ngemihla uphuhliso losetyenziso luhlala kumhlaba weDart.
Izinto ezikhethwayo ekwabelwana ngazo kunye neSQLite nazo zineengqamaniso esezilungile. Apho Android inikeza SharedPreferences kwisitshixo esincinci-ixabiso lokugcina kunye neSQLite (okanye iGumbi) ledatha eyakhiweyo, iFlutter isonga ezi plugins njenge shared_preferences kwaye sqflite. Ezi plugins zidibanisa i-Android kunye nokuziphatha kwe-iOS ukuze ukwazi ukusebenzisa i-Dart API enye kungakhathaliseki iqonga, ngelixa uxhomekeke ekuphunyezweni okusisiseko.
Udibaniso lweFirebase lukwalula ngokufanayo kwaye ludidi lokuqala. Uninzi lweenkonzo ze-Firebase—uQinisekiso, iFirestore, iRealtime Database, Cloud Messaging, Analytics, Remote Config nezinye—zineeplagi zeFlutter ezisemthethweni ezigcinwe liqela leFirebase kunye neFlutter. Bajonga imodeli yengqikelelo evela kwi-Firebase SDK ye-Android kodwa nge-Dart-idiomatic APIs. Ukufumana ngakumbi i-niche ye-Firebase yeempawu ezingagqunywanga ngokuthe ngqo, kukho i-ecosystem esempilweni yeeplagi zomntu wesithathu kwi-pub.dev.
Ukulungisa iimpazamo kunye nokwenza iprofayile, i-suite ye-Flutter's DevTools ikunika ibhokisi yesixhobo esityebileyo enokuthelekiswa ngokuthe ngqo neprofayile yeSitudiyo se-Android kunye noMhloli weLayout. Ungawujonga umthi wewijethi, ulandelele ukwakhiwa kwakhona, ubukele ulwabiwo lwememori, uxilonga ukuvuza kunye nokwahlulahlula, kwaye uhambe ngekhowudi yeDart. Idityaniswe nenkxaso ye-IDE kwi-Android Studio kunye neKhowudi ye-VS, ukulayishwa kwakhona okushushu kunye nokutshisa ngokutsha, umjikelo wengxelo ekuphuhlisweni kweFlutter uziva ubuncinci uqinile-kwaye uhlala uqina-kunokuba ubuqhele ukwenza uMqulu.
Izaziso zokutyhala, enye inkxalabo eqhelekileyo ye-Android, iphathwa kwiFlutter ngeeplagi ezinje firebase_messaging. Ngaphantsi kwe-hood ezi zithetha kwi-Firebase Cloud Messaging kunye nesakhelo sezaziso zomthonyama kwi-Android kunye ne-iOS, kodwa i-logic ye-app yakho ihlala kwi-Dart API emanyeneyo. Ulungelelwaniso kunye nokuziphatha okuthe ngqo kweqonga (njengamajelo esaziso kwi-Android) zisabalulekile, kwaye namava akho asele ekhona ngezo nkcukacha zeqonga asaqhubeka ebaluleke kakhulu.
Nokuba iiwijethi zesikrini sasekhaya kwi-Android, ezingenakufezekiswa kuphela kwiFlutter, zinokudityaniswa nekhowudi yeFlutter. Uzakha ngeJetpack Glance okanye iXML uyilo kwaye usebenzise iphakheji efana ne home_widget ukunxibelelana ne-app yakho yeFlutter, wabelane ngedatha kwaye ubethelele i-UI yeFlutter eyi-rasterized njengomfanekiso ngaphakathi kwiwijethi yemveli. Le ndlela ye-hybrid ikuvumela ukuba ugcine amava akho aphambili kwiFlutter ngelixa uhlonipha imiqobo yeqonga.
Ukujonga kuzo zonke ezi zifanayo, umphuhlisi weJetpack Compose ongena kwiFlutter akaqali ukusuka kwi-zero kwaphela. Ukuqonda kwakho i-UI echazayo, umjikelo wobomi be-Android, ukukhangela, ilizwe, izixhobo kunye neemephu zomsebenzi we-async ngokwemvelo kwihlabathi leFlutter; olona tshintsho luninzi ngamagama, ulwimi (Dart), kunye neplatform yeengcinga ezininzi. Nje ukuba ungenise iiwijethi kunye neNavigator njengeekhonsepthi ezisisiseko, intsalela yesitaki ithande ukucofa kwindawo ngokukhawuleza.