Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Mobile Development
Code

Kreiranje vaše prve aplikacije koristeći Fuse

by
Difficulty:BeginnerLength:LongLanguages:

Croatian (Hrvatski) translation by Koraljka Kosić (you can also view the original English article)

Sada kada ste naučili osnovne pojmove Fusea, vrijeme je za praksu i izgradnju aplikacije. U ovom tutorijalu naučit ćete kako napraviti aplikaciju koristeći Fuse okvir. Točnije, naučit ćete slijedeće:

  • Kako kodirati koristeći UX Markup.
  • Kako koristiti  sučelja opservabilnih varijabli, sučelja brojača vremena i geolokacijska sučelja za programiranje aplikacija (APIs)
  • Kako pregledati aplikaciju koristeći pregled na desktopu i prilagođeni pregled

Ako trebate osvježiti svoje znanje o Fuseu, pogledajte moj prijašnji post u ovoj seriji: Predstavljanje Fusea za razvoj aplikacija na više platformi.

Preduvjeti

Kako bi započeli raditi sa Fuseom, otiđite na stranicu za preuzimanje i napravite korisnički račun. Također, ako imate korisnički račun, možete se prijaviti.

Fuse je dostupan i za Windowse i za macOS. Preuzmite i instalirajte odgovarajući instaler za vašu platformu. Na stranici za preuzimanje su također navedeni dostuptni dodaci za Fuse za različite uređivače teksta. Instalirajte onaj koji je naveden za vaš uređivač teksta. Fuseovi dodaci uključuju završavanje koda, goto definicije i pregled bilježaka koje stvara aplikacija, što sve čini razvoj aplikacija pogodnijim.

Također ćemo naučiti kako pregledati aplikaciju koristeći prilagođeni pregled. To zahtijeva da na vaše računalu budu instalirani Android Studio ili Xcode.

Osnovno razumijevanje web tehnoligija kao što su HTML, CSS, i JavaScripta bit će od pomoći ali nije obavezno.

Što ćete napraviti

Napravit ćete aplikaciju štoperice koja uz to mjeri pređenu razdaljinu. Razdaljina se mjeri koristeći geolokaciju. Korisnik može kreirati i krugove, a individualna razdaljina i vrijeme svakog kruga će se prikazati na ekranu.

Evo kako će aplikacija izgledati:

Final Output HIIT Stopwatch

Cijeli izvorni kod možete vidjeti na GitHubu.

Kreiranje novog Fuse projekta

Kada ste instalirali Fuse Studio, trebali bi moći kreirati novi Fuse projekt. Samo otvorite Fuse Studio i kliknite na gumb New Fuse Project. Upišite ime projekta i kliknite Create:

Create a new Fuse project

To će kreirati novu mapu u odabranom direktoriju. Otvorite tu mapu i otvorite MainView.ux datoteku. Prema zadanim postavkama imat će samo <App> oznaku. Ažurirajte je tako uključuje i <Text> i zatim spremite datoteku:

Pregled bi sada trebao biti ažuriran tekstom koji ste odredili:

Hello world output

To je glavni razvojni tijek rada u Fuseu. Samo spremite promjene bilo koje datoteke u direktoriju projekta i one će se automatski odraziti na pregledu na desktopu.

Također možete vidjeti bilješke u donjem panelu. Možete pokrenuti vlastite bilješke koristeći console.log(), kao u pretraživaču. Jedina razlika je što morate JS0N.stringify() objekte kako biste vidjeli njihovu vrijednost, jer implementacija console.log() u Fuseu ima izlaz samo u obliku stringova.

UX Markup

Sada smo spremni izgraditi aplikaciju. Otvorite MainView.ux datoteku i uklonite <Text> element koji ste dodali ranije. Na taj način, započet ćemo sa praznim ekranom:

Dodavanje fontova

Kao i u HTML dokumentu, standard je da se resursi - kao što su fontovi, stylesheets i skripte - dodaju prije određivanja izgleda. Unutar <App> elementa dodajte slijedeće:

To će uvesti font određen u atributu File i dati mu ime Thin. Primjetite da ova naredba ne čini taj font zadanim za cijelu stranicu. Ako želite koristiti ovaj font, morate upotrijebiti njegovo ime (Thin) na određeni tekst na kojem ga želite upotrijebiti.

Font možete preuzeti sa tutorijala GitHub repo. Nakon toga, kreirajte mapu assets/fonts/robot unutar root direktorija projekta i u nju stavite .ttf datoteku.

Ako želite koristiti neki drugi font, možete ga preuzeti sa dafont.com. Od tamo sam ja preuzeo font za ovu aplikaciju.

Nadalje, u ovoj aplikaciji želimo koristiti ikone. Fuse zapravo nema ugrađene elemente i grupe ikona koje bi vam omogućile da to učinite. Ono što nudi je način da uključite ikonske fontove u vašu aplikaciju. S obzirom na to da su ikonski fontovi u biti fontovi, možemo koristiti istu metodu kao i za dodavanje fontova:

Ikonski font možete preuzeti sa GitHub repo ili direktno sa fontawsome.com. Obratite pažnju na to da sve ikone sa fontawsoma nisu besplatne, pa bi bilo najbolje provjeriti samu stranicu za ikone prije njihove upotrebe. Ako se u blizini ikone nalazi oznaka "pro", onda je ne možete koristiti bez plaćanja.

Dodavanje JavaScripta

Sada moramo dodati JavaScript datoteku za ovu stranicu. To možemo učiniti korištenjem <JavaScript> elementa:

Nemojte zaboraviti kreirati datoteku scripts/MainView.js u root direktoriju projekta.

Kreiranje novih komponenti

Radi maksimiziranja ponovne upotrebe koda, Fuse dopušta kreiranje prilagođenih komponenti iz već postojećih komponenti. U donjem kodu, koristimo <Panel> za kreiranje prilagođenog gumba. Razmišljajte o njemu kao o <div> koji se ponaša kao spremnik za ostale elemente. U ovom slučaju, koristimo ga kao višekratno upotrebljivu komponentu za izradu gumba.

Fuse dolazi sa mnogo elemenata. Tu su elementi za raspored sadržaja kao što je <Panel>, elementi za prikaz korisničkih kontrola, stranica i navigacije, skriptiranja i podataka, te elemenata za izgradnju korisničkog sučelja. Svaki od tih elemenat ima svoju zbirku svojstava, što vam omogućava izmjenu podataka, izgleda i ponašanja.

Za kreiranje višekratne komponente, dodajte ux:Class svojstvo prezentacijskom elementu koji želite koristiti kao osnovu. U ovom slučaju, koristimo <Panel> kao bazu. Tada možete dodati zadani stil. To je slično onome kako se stilovi dodaju u CSSu. Margin dodaje prostor izvan spremnika. Ovdje smo odredili samo jednu vrijednost, pa se ova margina primjenjuje na sve strane panela. Color elementu dodaje pozadinsku boju:

Unutar <Panel> želimo prikazati tekst gumba. Želimo da ova komponenta bude višekratna, pa nam je potreban način proslijeđivanja svojstava kasnije kada ovu komponentu budemo koristili. To nam omogućava da postignemo različite rezultate samo promjenom svojstava.

Unutar <Panel> koristite tip podataka one vrijednosti koju želite proslijediti kao ime elementa i onda dodajte ime svojstva koristeći ux:Property. Tada možete prikazati vrijednost dodjeljenog svojstva koristeći {ReadProperty PropertyName}, gdje je PropertyName vrijednost dodjeljena u ux:Property. To će vam omogućiti da dodjelite Text svojstvo kada god koristite komponentu <ToggleBtn>.

Zatim želimo korisniku ponuditi neku vrstu povratne informacije dok je gumb pritisnut. To možemo učiniti putem okidača i animatora. Okidači su u osnovi osluškivači događaja - u ovom slučaju <WhilePressed>. Animatori su animacije ili efekti koji želite da se dogode dok su okidači aktivni. Donji kod će gumb učiniti 10% većim od prvotne veličine i promijeniti mu boju. Duration i DurationBack vam omogućavaju da odredite koliko će trebati da naimacija postigne svoj vrhunac i dođe do kraja.

Zatim ćemo kreirati komponentu <IconBtn>. Kao što samo ime kaže, ovo je gumb koji prikazuje samo ikonu kao svoj sadržaj. Ova komonenta funkcionira kao i prijašnja, iako smo ovdje napravili nekoliko novih stvari.

Prva je ux:Name svojstvo. Ono nam omogućava da dodjelimo ime određenom elementu kako bi se kasnije mogli referirati na njega. U ovom slučaju, koristimo ga za promjenu svojstva Color dok je gumb pritisnut.

Također smo koristili uvjetni element zvan <WhileTrue>. On omogućava isključivanje okidača <WhilePressed> kada je vrijednost is_running netočna. Ovoj varijabli ćemo dodjeliti vrijednost kada dođemo do dijela sa JavaScriptom. Za sada, znajte da ova varijabla pokazuje da li vremenski brojač trenutno teče ili ne.

Glavni sadržaj

Sada možemo krenuti dalje sa glavnim sadržajem. Prvo ćemo sve omotati u <StackPanel>. Kao što mu ime govori, on nam omogućava da njegovu djecu "složimo" bilo okomito, bilo vodoravno. Po zadanim postavkama koristi okomitu orjentaciju, pa je ne treba specificirati:

U gornjem kodu koristili smo četiri vrijednosti za Margin. Za razliku od CSSa, distribucija vrijednosti je lijevo, gore, desno, dolje. Ako su navedene samo dvije vrijednosti, one se odnose na lijevo-desno, gore-dolje. U Fuse Studiu možete koristiti alat za odabir kako biste vizualizirali primjenjene margine.

Zatim dodajemo pozadinsku sliku za stranicu. Element prihvaća putanju datoteke do pozadinske slike koju želite koristiti. StretchMode iz Fill će učiniti da se pozadina razvuče kako bi ispunila cijeli ekran:

Možete preuzeti pozadinsku sliku koju sam koristio iz tutorijala GitHub repo. Ili možete pronaći slične uzorke na Toptal stranici.

Zatim prikažite ime aplikacije. Ispod njega nalazi se tekstualno polje proteklog vremena. Taj tekst se mora često ažurirati, pa ga moramo pretvoriti u varijablu koju možemo ažurirati putem JavaScripta. Za ispisivanje teksta inicijaliziranog JavaScript datotekom, ime varijable morate zatvoriti vitičastim zagradama. Kasnije ćete vidjeti kako JavaScript dodjeljuje vrijednost ovoj varijabli:

Zatim ćemo upotrijebiti komponentu <IconBtn> koju smo kreirali ranije - slično kao u web okolišu gdje koristimo identifikaciju fonta. U Fuseu morate koristiti Unicode koji je dodjeljen ikonskom fontu koji želite koristiti. Također morate koristiti &#x kao prefiks. Kada je ovaj gumb pritisnut (nazvano Clicked), tada se izvodi funkcija addLap() koja je deklarirana u JavaScript datoteci:

U Font Awsome možete pronaći unicode za ikonske fontove na njihovoj stranici.

Odmah ispod gumba za dodavanje novih krugova (etapa?) nalazi se tekst koji naznačava da gornji gumb služi za dodavanje krugova:

Zatim prikažite gumb za pokretanje i zaustavljanje brojača vremena. On će također izvršavati funkciju koju ćemo deklarirati kasnije:

Zatim moramo prikazati izlaz za krugove koje je dodao korisnik. To uključuje broj kruga, prijeđenu udaljenost i proteklo vrijeme. Element <Each> omogućava nam iteraciju kroz zbirku objekata i prikažemo pojedinačna svojstva svakog objekta:

U gornjem kodu koristimo <DockPanel> za omotavanje sadržaja svake stavke. Ova vrsta panela omogućava nam da "vežemo" njegovu djecu za različite strane (vrh, lijevo, desno i dno) dostupnog prostora. Korištenjem zadane vrijednosti, njegova djeca se smještaju odmah jedno iznad drugoga. Kako bi ih ravnomjerno rasporedili, morate dodati svojstvo Alignment.

JavaScript kod

Sad smo spremni dodati JavaScript kod. Kod Fusea, JavaScript se uglavnom koristi za poslovnu logiku i rad s izvornom funkcionalnošću uređaja. Efekte, prijelaze i animacije za interakciju sa korisničkim sučeljem već je obradio UX Markup.

Započnite s uvozom svih API-ja koje ćemo trebati. To uključuje i Observable, koji se uglavnom koristi za dodjelu varijabli unutar korisničkog sučelja. Te varijable se zatim mogu ažurirati koristeći JavaScript. Timer je ekvivalent funkcija setTimeout i setInterval u web verziji JavaScripta. Geolocation nam omogućava dobivanje trenutne lokacije korisnika:

Zatim inicijaliziramo sve opservabilne vrijednosti koje ćemo koristiti. To su varijable koje ste ranije vidjeli u UX Markup. Vrijednosti ovih varijabli se ažuriraju tijekom cijelog životnog vijeka aplikacije, pa ih zato deklariramo opservabilnim varijablama. To nam omogućava da ažuriramo sadržaj korisničkog sučelja kada god se neke od tih vrijednosti promjene:

Nakon toga, možemo postaviti početne vrijednosti za gumb i tekst brojača vremena:

Tako se vrši izmjena vrijednosti opservabilne varijable. S obzirom da se varijable ne nalaze unutar neke funkcije, korisničko sučelje bi se trebalo ažurirati odmah nakon pokretanja aplikacije.

Postavite inicijalne vrijednosti za brojač vremena, vrijeme etapa i lokaciju za svaku etapu:

Funkcija toggle() koristi se za pokretanje i zaustavljanje brojača vremena. Vrijednosti brojača vremena i etapa resetirat će se samo  kada je brojač vremena zaustavljen i korisnik pritisne gumb. To je zato jer želimo da korisnik vidi ove vrijednosti čak i nakon što zaustavi brojač vremena.

Nakon toga treba preuzeti trenutnu lokaciju korisnika i staviti je u niz locations. To nam omogućava da je kasnije usporedimo sa idućom lokacijom, kada korisnik doda etapu. Zatim kreirajte štopericu koja se izvršava svakih 10 milisekundi. Povećavamo i cjelokupni time i lap_time za svako izvršenje. Zatim ažurirajte korisničko sučelje formatiranom vrijednošću koristeći funkciju formatTimer():

Kada korisnik zaustavi brojač vremena, izbrišemo je koristeći delete() metodu unutar brojača vremena. To zahtjeva timer_id koji je kreiran kada je brojač vremena kreiran:

Zatim slijedi funkcija za formatiranje brojača vremena. Ona radi tako što milisekunde pretvara u sekunde i minute. Već znamo da se ova funkcija izvodi svakih 10 milisekundi. Itime se povećava za 1 svaki put kada se izvede. Kako bi dobili milisekunde, jednostavno pomnožimo time sa 10. Iz toga izračunavamo sekunde i minute na temelju ekvivalentne vrijednosti za svaku jedinicu mjerenja:

Svaki put kada korisnik dodirne gumb za osvježavanje, izvršava se funkcija addLap(). To dodaje novu stavku na vrhu opservabilne varijable laps:

Evo funkcije za dobivanje pređene udaljenosti u metrima. Ona koristi haversin formulu:

Ne zaboravite izvesti sve opservabilne vrijednosti:

Geolokacijski paket

Kako bi ostao lagan, Fuse ne sadrži sve pakete koje podržava. Za stvari kao što su geolokacija i lokalne notifikacije, trebate reći Fuseu da ih uključi prilikom izgradnje aplikacije. Otvorite StopWatch.unproj u rootu vašeg projektnog direktorija i dodajte Fuse.Geolocation pod niz Packages:

Ovo bi trebalo uputiti Fuse da uključi Geolokacijski paket kadgod se aplikacija izvodi za prilagođeni pregled ili pri generiranju instalacijskog programa.

Postavljanje prilagođenog pregleda

Prije nego budete mogli pokrenuti aplikaciju na vašem iOS uređaju, aplikaciji trebate prvo dodati identifikator paketa. Otvorite datoteku StopWatch.unproj i dodajte slijedeće pod iOS. To će biti jedinstvena identifikacija aplikacije kada aplikacija bude predana trgovini aplikacijama.

Zatim se prijavite na Xcode sa vašim Apple developerskim računom. Ako ga još nemate, možete otići na Apple developesku web stranicu i napraviti račun. Besplatno možete razvijati i testirati aplikacije na vašem iOS uređaju. Ipak postoje neka ograničenja ako niste uključeni u developerski program.

Jednom kada ste napravili račun, otiđite na Xcode preference i dodajte vaš Apple račun. Tada kliknite na Manage Certificates i dodajte novi certifikat za iOS razvoj. Taj certifikat se koristi kako bi se osiguralo da aplikacija dolazi iz poznatog izvora.

Jednom kada je to napravljeno trebali biste moći pokrenuti aplikaciju na vašem uređaju. Kliknite na Preview > Preview on iOS u Fuse Studiju i pričekajte da pokrene Xcode. Jednom kada se Xcode otvori, odaberite vaš uređaj i kliknite na gumb za reprodukciju. To će izgraditi aplikaciju i instalirati ju na vaš uređaj. Ako se pojavi greška, vjerojatno se radi o tome da identifikator paketa pregleda nije jedinstven:

change the bundle ID

Promjena identifikatora paketa u nešto jedinstveno trebala bi riješitei problem. Jednom kad greške ispod djela za prijavu nestanu, ponovno kliknite na gumb za reprodukciju kako biste ponovno izgradili aplikaciju. To bi trebalo instalirati aplikaciju na vaš uređaj.

No aplikaciju nećete moći otvoriti dok je ne potvrdite. To možete učiniti tako da otiđete na Settings > General > Device Management i odaberete email koji je povezan sa vašim Apple Developer računom. Odobrite je i to bi trebalo otključati aplikaciju.

Za Android, aplikaciju biste trebali moći pregledati bez dodatnih koraka.

Zaključak

To je to! U ovom tutorijalu naučili ste osnove kreiranja aplikacije korištenjem Fuse okvira. Točnije, kreirali ste aplikaciju štoperice. Kreiranjem ove aplikacije, naučili ste kako raditi sa Fuseovim UX Markupom i nekoliko Fuseovih JavaScript sučelja za programiranje aplikacija (API). Također ste naučili kako koristiti Fuse Studio za pregled aplikacije na vašem računalu i mobitelu dok je još u razvoju.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.