Frameworkit, Osa 1: Flutter – Useilla alustoilla toimivaa natiivikoodia yhdellä ja samalla koodipohjalla

Flutter on Googlen kehittämä, erityisesti UI-sovelluskehityksessä käytettävä framework eli kirjasto, jolla voidaan kehittää useille alustoille käännettäviä sovelluksia. Flutterin perusajatus on käytännössä siinä, että sen avulla eri ohjelmointikielillä kirjoitettua koodia voidaan kääntää natiivialustalla toimivaksi koodiksi.

Flutterin taustalla on Googlen kehittämä Dart-ohjelmointikieli, eli se ei noudata suoranaisesti minkään tietyn alustan natiivi- tai ohjelmointikieltä vaan käyttää omaansa. Flutter on siis käytännössä kehitetty Dartilla tehtävän kehityksen tueksi, ja Dartin ominaisuuksia voidaan hyödyntää tehokkaasti nimenomaan client-puolen käyttöliittymien ohjelmoimisessa sekä lähinnä web- ja mobiilisovelluksissa.

  • Ensimmäinen versio Flutterista julkaistiin vuonna 2017
  • Flutterilla koodi kääntyy useiden eri alustojen omaksi natiivikoodiksi
  • Framework perustuu Dart-ohjelmointikieleen, joka soveltuu hyvin esimerkiksi verkko- ja mobiilisovellusten kehitykseen

Vertailukumppanina React Native

Flutter noudattaa käytännössä samaa lähestymistapaa kuin React-maailman React Native -kirjasto, eli sen avulla siis muodostetaan yhden sovelluskoodin pohjalta sovelluksia useille eri natiivialustoille.

Flutter tosin vie asiat vielä hieman pidemmälle: siinä missä Reactin pointti on JavaScriptin suorittaminen natiivialustoilla pyörivän kehyksen sisällä, Flutter käännetään natiivisovellukseksi suoraan. Tällä tavalla esimerkiksi Android-sovellusta kirjoitettaessa koodi kirjoitetaan natiivikielen sijaan Flutterin ohjelmointikielellä ja käännetään sekä paketoidaan vasta sen jälkeen valmiiksi Android-sovelluspaketiksi.

Ero React Nativeen ja muihin frameworkeihin syntyy siis siitä, että Flutter tarjoaa vielä paremmat mahdollisuudet natiiviominaisuuksien käyttöä varten. Flutter mahdollistaa saman koodipohjan käytön kätevästi kehitettäessä sovelluksia, jotka tukevat eri alustojen natiiviominaisuuksia. 

Flutter toimii tällä hetkellä niin Windowsilla, Androidilla, Linuxilla, macOS:lla kuin iOS:llakin, eli se kattaa hyvin yleisimmät käyttöjärjestelmät. Linux-tuki ei tosin ole vielä aivan samalla tasoilla kuin muut edellä mainitut, sillä esimerkiksi Android ja iOS ovat yleensä ne ensimmäiset käyttöjärjestelmät, joille frameworkien suunnittelu aloitetaan. 

  • Flutter toimii React Nativen tapaan ohjelmointikielien kääntäjänä natiivialustoille
  • Sen sijaan, että kieltä pyöritettäisiin alustalla esimerkiksi React-kehyksen sisällä, Flutter kääntää koodin suoraan natiivisovellukseksi
  • Flutter kattaa hyvin yleisimmät käyttöjärjestelmät, kuten Windowsin, Androidin ja iOS:n

Jos puhutaan vaikkapa biometrisestä tunnistautumisesta, notifikaatioista tai paikkatietojen käytöstä, tällaisia ominaisuuksia voidaan yleensä käyttää React Nativen rajapinnoilla; toisaalta on myös paljon ominaisuuksia, joita React Nativella ei voida suoranaisesti käyttää tai niiden hyödyntämismahdollisuudet ovat rajatumpia. Rajallisuus johtuu juuri siitä, että React Native ei suoraan käänny natiivikoodiin vaan riippuu tarjolla olevista rajapinnoista. 

Flutter tarjoaa kätevän tavan kommunikoida eri natiivialustojen koodin kanssa. Kattava kirjasto Flutter-kehittäjien sekä kehittäjäyhteisön kirjoittamia koodipaketteja tarjoaakin lähes minkä tahansa natiiviominaisuuden käyttöön suoraan Flutter-sovelluksen koodissa. Näin integraatio vaikkapa kameran käyttöön voidaan tehdä kätevästi koskematta alustakohtaiseen koodiin.

Flutter sisältää myös React Nativesta poiketen sisäänrakennettuna monipuolisen, valmiiksi tyylitellyn komponenttikirjaston. Komponentit ovat ulkoasultaan yhtenäisiä, jolloin sovelluksen käyttöliittymä pysyy siistinä ilman ylimääräistä säätöä. Ne tarjoavat kuitenkin myös laajat mahdollisuudet räätälöintiin, joten hyvinkin yksilöllisen ja tarkasti tarpeiden mukaisen käyttöliittymän rakentaminen on helppoa.

  • Flutterilla voidaan yleisesti käyttää sellaisia natiivialustojen ominaisuuksia, joiden hyödyntäminen jää React Nativella niukemmaksi
  • Suoraan natiivikoodille kääntymisen ansiosta Flutter on monessa kohtaa suorituskykyisempi kuin React Native
  • Flutteria käyttämällä kehittäjä saa myös käyttöönsä kattavan, valmiiksi tyylitellyn komponenttikirjaston.

Kehittäjille kätevämpi ohjelmistokehitys ja laaja kattaus ominaisuuksia

Flutter toimii samaan tapaan kuin yleensä kaikki käyttöliittymiä rakentavat frameworkit toimivat – komponenttipohjaisesti. Sen avulla luodaan periaatteessa UI-käyttöliittymä eri komponenteista, joille kasataan ohjelmistossa erilaisia ominaisuuksia sekä päivitettäviä tiloja. 

Toimintaperiaate on siis samanlainen kuin muissakin frameworkeissa, mutta Flutter tarjoaa helpomman tavan kehittää käyttöliittymää ja tukee yleisesti runsasta määrää näppäriä ominaisuuksia. Ohjelmistokehitys on sen avulla yleisellä tasolla vaivattomampaa, ja sen voikin sanoa olevan suhteellisen käyttäjäystävällinen alusta puhtaasti natiivialustoille kehittämiseen verrattuna.

Flutter alkaa olla teknologiana nykyään ns. go to -vaihtoehto mobiilikehitykseen vaikkapa juuri Androidilla sekä iOS:lla. Myös Google on itse siirtynyt Flutterilla kehittämiseen suoraan Android-kehityksen sijaan, ja Flutterista käännetäänkin koodia Androidille nykyisin hyvin usein. 

Flutter tarjoaa siis käyttäjälleen

  • runsaan määrän monipuolisia ominaisuuksia natiivisovellusten kehitykseen eri alustoilla
  • vaivattomamman tavan kehittää ohjelmistoja natiivikoodin suoran kääntämisen myötä
  • kattavat mahdollisuudet hyödyntää natiivialustojen ominaisuuksia.