Mikä on Flutter?
Flutter on Googlen luoma ohjelmistokehityspaketti, jonka ensimmäinen vakaa versio julkaistiin vuonna 2018. Flutterin tarkoituksena on mahdollistaa kehittäjiä luomaan kauniita ja natiiveja sovelluksia erilaisille alustoille, kuten mobiiliin, webbiin ja työpöydälle. Tällä hetkellä tuotantovalmiit alustat ovat Android ja iOS.
Flutter lähestyy alustojen välistä sovelluskehitystä radikaalimmalla tavalla kuin kanssakilpailijansa. Muihin järjestelmäriippumattomiin ohjelmistokehyksiin verrattuna Flutter ei käytä laitevalmistajien tarjoamia widgettejä (käyttöliittymäkomponentteja). Sen sijaan Flutter käyttää Skia-renderöintimoottoria luodakseen widgetit, joka mahdollistaa Flutter-sovelluksien korkean ja tasaisen laadun.
Flutter tarjoaa kehittäjille valmiiksi luotuja korkean tason widgettejä, jotka on luotu yhdistämällä alemman tason widgettejä yhteen, ja joita kehittäjät ovat tottuneet käyttämään Android- ja iOS-alustoilla. Flutter jakaa Android- ja iOS-alustojen widgetit kahteen ryhmään: Material Design (Android) ja Cupertino (iOS). Flutter on suunniteltu siten, että loppukehittäjät voivat widgettejä yhdistämällä luoda uusia korkean tason widgettejä.
Avoimen lähdekoodin ohjelmistokehityspakettina Flutter mahdollistaa sovelluksen täydellisen kustomoinnin toisin kuin natiivi Android- ja iOS -kehitys, jossa kehittäjä työskentelee suljetun lähdekoodin parissa. Flutter on luotu käyttämällä C-, C++- ja Dart-ohjelmointikieliä. Suurin osa lähdekoodista on kirjoitettu Dart-ohjelmointikielellä, joka tekee Flutterista helposti lähestyttävän ohjelmistokehyksen kehittäjille.
Mikä on Dart?
Dart on Googlen kehittämä ohjelmointikieli, jota käytetään Flutter-sovelluksien kehityksessä, sekä myös itse Flutter-ohjelmistokehityspaketissa.
Dart-ohjelmointikieli käyttää samankaltaista syntaksia kuin Java, jota on yksinkertaistettu kehittäjän näkökulmasta. Dart-ohjelmointikielen tarkoitus ei ollut koskaan olla mullistava, vaan helposti omaksuttava ja lähestyttävä ohjelmointikieli niin aloittaville kuin kehittyneemmillekin ohjelmoijille. Dart-ohjelmointikieli on optimoitu käyttöliittymien luomiseen, antamalla kehittäjille tarpeelliset työkalut nopeaan sovelluskehitykseen. Flutter sisältää Hot-reload-toiminnon, joka kääntää käynnissä olevan sovelluksen koodin sen tilaa muuttamatta. Hot-reload toiminnon mahdollistaa Dart-ohjelmointikielen JIT (Just in Time) -kääntäjä.
Valmiit Flutter-sovellukset käännetään Dart-ohjelmointikielen AOT (Ahead of Time) -kääntäjällä, joka mahdollistaa erittäin suorituskykyiset alustakohtaiset käännökset.
Kokemukseni Flutterista?
Henkilökohtainen Flutter-matkani alkoi opiskelujeni ohella vuonna 2019, kun mobiilikehitys alkoi kiinnostaa. Vaihtoehtoina oli opetella natiivikehitystä tai järjestelmäriippumattomien ohjelmistokehyksien, kuten React Nativen, käyttöä. Mutta kuten usein ohjelmistokehityksessä on tapana, täytyy kokeilla vähän uudempaa ja hienompaa teknologiaa, joten sattumalta löysin Flutterin.
Löydettyäni Flutterin, oli aika keksiä projekti mitä alkaisin työstämään kartuttaakseni tietämystäni sekä Flutterista että Dart-ohjelmointikielestä. Olen julkisen liikenteen suuri fani, joten kehitin siihen liittyen itselleni mukavan harjoitusprojektin. Tarkoituksena oli seurata Turun julkisen liikenteen busseja reaaliaikaisesti, ja antaa käyttäjälle erilaista informaatiota, kuten esimerkiksi milloin kannattaa lähteä pysäkille ja missä ihmeessä se bussi mennä köröttää. Vaikka tämän tyyppisiä sovelluksia oli jo olemassa, niin pitäähän sitä aina yrittää tehdä hienompi ja parempi.
Flutter antaa kehittäjälle täysin vapaat kädet, miten sovelluksen haluaa rakentaa ohjelmistoarkkitehtuurisesta näkökulmasta. Vaihtoehdoikseni jäi selata erilaisia ohjelmistoarkkitehtuureista kertovia opuksia tai käyttää toimivaksi todettua menetelmää: yrityksen ja erehdyksen kautta. Nohevana kehittäjänä lähdin tietysti suoraan hommiin kirjoja vilkaisematta. Projektin edetessä ohjelmistoarkkitehtuurit ja erinäiset muut ohjelmistokehityksen konseptit tulivat tutuiksi ja ymmärsin kuinka tärkeitä nämä asiat oikeasti ovatkaan.
Käyttöliittymän tekovaiheessa huomasin kuinka helppoa ja nopeaa kehitys Flutterin kanssa on. Googlen tarjoamat kehitystyökalut ovat tarkkaan harkittuja ja tukevat kehitystä, eikä päinvastoin. Flutter tarjoaa Material (Android) ja Cupertino (iOS) widgetit suoraan ”out of the box”, joten niitä ei tarvitse luoda itse, eivätkä ne ole sidottu millään tavalla kehitysalustaan. Yksi Flutterin houkuttelevimpia ominaisuuksia ovat täysin kustomoitavat widgetit, jolloin kehittäjällä on vain taivas rajanaan. Mahdollisuuksia on loputtomasti.
Tämän kehittäjän sydäntä lämmittää erityisesti se, että kaikki uudet versiot ovat taaksepäin yhteensopivia. Joten vaikka uusia versioita ja ominaisuuksia tulee lisää, ei ensin tarvitse juosta naama edellä rotkoon, vaan pääsee suoraan nauttimaan uusien päivitysten hyödyistä.
Käyttöliittymä kunnossa ja data hukassa, vai miten se meni? Monissa asioissa missä Flutter ja Dart ovat loistavia, on niillä myös varjopuolensa. Esimerkiksi datan deserialisointi on joko manuaalista puuhaa tai kehittäjän pitää tukeutua koodin generointiin. Koodin generointi ei itsessään ole ongelma, mutta se ei mielestäni myöskään ole ratkaisu. Jos joudutaan tukeutumaan koodin generointiin, pitäisi tarkastella voisiko itse ohjelmointikielelle saada uusia ominaisuuksia.
Mitä jäi käteen?
Onko Flutter siis täydellinen paketti, joka ratkaisee kaikki ongelmat? Ei suinkaan. Flutteria, kuten monia muitakin ohjelmistokehyksiä vaivaa omat ongelmansa. Onneksi maailma on pullollaan toinen toistaan upeampia ohjelmistokehyksiä, joten ei tarvitse jäädä vain yhden varaan nojaamaan.
Olenko itse yhä Flutterin suurkuluttaja? Kyllä vain. Flutter on yhä kasvuvaiheessa ja mielenkiinnolla odotan, mitä tuleman pitää.
Käytänkö Flutteria kaikkeen? Nope, en missään nimessä. Ohjelmistokehys ja ohjelmointikieli tarpeen mukaan, eikä toisinpäin.
Monet asiat mitä tiedän ohjelmistokehityksestä juurtaa juurensa Flutterin ja Dart-ohjelmointikielen opiskelusta. Flutter on tuonut minulle kehittäjänä haasteita ja antanut ratkaisuja, sekä uusia ohjelmointiin liittyviä konsepteja. Näitä oppeja pystyn hyödyntämään monissa muissakin projekteissa kieleen tai ohjelmistokehykseen katsomatta.